文章出處

Sangmado(發音 /sɔŋmɑːdu:/ ‘桑麻渡’)涵蓋了支撐 .NET/C# 項目開發的最基礎的公共類庫,為團隊在不斷的系統開發和演進過程中發現和積累的最公共的代碼可復用單元。

Sangmado 公共類庫設計原則:

  • 獨立性:不與任何業務框架或業務應用耦合;
  • 依賴性:最小化外部類庫依賴,選擇最穩定的依賴庫版本;
  • 分離性:關注點分離,滿足 Separation of Concerns;
  • 兼容性:通過 x.y.z 版本號控制兼容性;
  • 易用性:發布 nuget 包,可在任意環境使用;
  • 開源性:使用 GitHub 代碼管理,PR 開發流程;

Sangmado 公共基礎類庫功能

使用 Inka 子名稱,意為 Infrastructure,為各種項目打造公共基礎設施。

名空間

功能描述 

 Sangmado.Inka.Caching

 關注各種緩存公共類庫。

  • StringCache:使用 Redis 存取字符串。
  • RedisSet
  • RedisList
  • RedisDictionary
  • RedisQueue
  • RedisStack

 依賴庫

  • Newtonsoft.Json
  • StackExchange.Redis

 Sangmado.Inka.Configuration

 關注各種配置,通過接口隔離配置服務。

  • IConfiguration:配置抽象接口。
  • AppSetting:使用 app.config 配置。

 依賴庫

  • System.Configuration

 Sangmado.Inka.Extensions

 關注各種 C# 基礎類的擴展方法。

  • ThreadExtensions
  • TimeSpanExtensions
  • DateTimeExtensions
  • EnumExtensions
  • StopwatchExtensions

 Sangmado.Inka.Logging

 日志系統的隔離接口。

  • ILog
  • ILogger

 Sangmado.Inka.Logging.NLogIntegration

 選擇使用 NLog 作為日志類庫。

  • CompositeLog
  • CompositeLogger

 依賴庫

 Sangmado.Inka.MomBrokers

 封裝 Message-oriented Middleware 消息中間件。

  • IIncomingMomChannel
  • IOutgoingMomChannel

 依賴庫

  • RabbitMQ.Client

 Sangmado.Inka.Security

 關注安全加密算法,公私鑰簽名驗簽等。

  • SHA1withRSA
  • SHA256withRSA
  • SHA512withRSA
  • MD5withRSA
  • TotpSecurityStampBasedTokenProvider 

 Sangmado.Inka.Serialization

 關注對象序列化和反序列化,數據壓縮。

  • BinaryConvert
  • XmlConvert
  • JsonConvert
  • GZipCompression

 依賴庫

  • Newtonsoft.Json

 Sangmado.Inka.Serialization.ProtocolBuffers

 封裝 Google Protocol Buffers 格式序列化。

  • ProtocolBuffersConvert

 依賴庫

  • protobuf-net

Sangmado 公共框架類庫功能

使用 Fida 子名稱,意為 Framework,嘗試為服務提供框架基礎。

  名空間

 功能描述 

 Sangmado.Fida.Http

 封裝內部 HTTP 服務和調用接口 

  • IEncodedHttpClient
  • EncodedResponse

 依賴庫

 Sangmado.Fida.Http.Scaffolding

 封裝內部 HTTP Service 腳手架,Server 支持 SelfHost

  • SelfHostHttpServer

 依賴庫

 Sangmado.Fida.MessageExtensions 

 為消息定義提供擴展方法。

  • MessageEnvelopeExtensions 

 依賴庫

  • protobuf-net
  • Newtonsoft.Json

 Sangmado.Fida.MessageEncoding 

 關注消息序列化和反序列化。

  • IMessageEncoder
  • IMessageDecoder
  • XmlMessageEncoder
  • JsonMessageEncoder
  • ProtocolBuffersMessageEncoder
  • BinaryMessageEncoder

 依賴庫

  • Newtonsoft.Json
  • protobuf-net

 Sangmado.Fida.Messages

 傳輸消息定義,消息信封格式。

  • MessageEnvelope

 依賴庫

  • protobuf-net

 Sangmado.Fida.Messaging

 (Legacy, 已被 Redola.Rpc 類庫取代)

 消息傳輸服務封裝。

  • Actor

 依賴庫

  • protobuf-net
  • Newtonsoft.Json

內部服務架構設計指導原則

  • 領域間定義明確的邊界,邊界僅提供 HTTP 或 MOM 交互,不能使用 RPC 等其他交互方式,為語言異構提供基礎,例如使用 Sangmado 中的 MomBrokers 封裝;
  • 領域邊界對外提供 Contract 服務契約,其他領域使用該 Contract 理解該領域的模型,Contract 定義語言無關,例如使用 Sangmado 中的 Json 或 Protobuf 封裝和解析;
  • 領域邊界 Contract 可發布至內部 nuget 服務器,供其他領域服務引用;
  • 領域內服務可選擇任意交互機制,Socket、RPC、HTTP、MOM 無限制;
  • 領域內 Common 類庫,如果為可復用代碼,可提升到 Sangmado 公共類庫中;

通用功能性類庫

版權聲明:本篇文章《Sangmado 公共基礎類庫》由作者 Dennis Gao 發表自博客園個人技術博客,未經作者本人同意禁止以任何的形式轉載,任何自動的或人為的爬蟲轉載行為均為耍流氓。


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()