Sangmado(发音 /sɔŋmɑːdu:/ ‘桑麻渡’)涵盖了支撑 .NET/C# 项目开发的最基础的公共类库,为团队在不断的系统开发和演进过程中发现和积累的最公共的代码可复用单元。
Sangmado 公共类库设计原则:
独立性:不与任何业务框架或业务应用耦合;
依赖性:最小化外部类库依赖,选择最稳定的依赖库版本;
分离性:关注点分离,满足 Separation of Concerns;
兼容性:通过 x.y.z 版本号控制兼容性;
易用性:发布 nuget 包,可在任意环境使用;
开源性:使用 GitHub 代码管理,PR 开发流程;
Sangmado 公共基础类库功能
使用 Inka 子名称,意为 Infrastructure,为各种项目打造公共基础设施。
Sangmado 公共框架类库功能
使用 Fida 子名称,意为 Framework,尝试为服务提供框架基础。
内部服务架构设计指导原则
领域间定义明确的边界,边界仅提供 HTTP 或 MOM 交互,不能使用 RPC 等其他交互方式,为语言异构提供基础,例如使用 Sangmado 中的 MomBrokers 封装;
领域边界对外提供 Contract 服务契约,其他领域使用该 Contract 理解该领域的模型,Contract 定义语言无关,例如使用 Sangmado 中的 Json 或 Protobuf 封装和解析;
领域边界 Contract 可发布至内部 nuget 服务器,供其他领域服务引用;
领域内服务可选择任意交互机制,Socket、RPC、HTTP、MOM 无限制;
领域内 Common 类库,如果为可复用代码,可提升到 Sangmado 公共类库中;
通用功能性类库
Cowboy.Sockets 基于 TCP Socket 的通用类库;
Cowboy.WebSockets 提供 WebSocket 支持;
Redola.Rpc 基于 TCP Socket 封装的 RPC 通信框架;
Happer.Http 支持 Self Host 的 HTTP 服务器;
Issuna 通用业务 ID 发号器;
Logrila 抽象 Log 日志接口,与具体的 Log 框架分离;