跳到主要内容

0001 — 严格 DDD 与纯 Core

背景​

此应用处理真实的资金流动。分散在端点、后台服务和 Razor 组件中的业务规则容易变成不可测试、行为不一致的代码 — 这正是一个 bug 会给用户造成资本损失的地方。

决策​

域逻辑存在于 src/Core 中的聚合根、值对象和域服务上,它们编译时零基础设施依赖(没有 EF、HttpClient、Docker 或 ASP.NET)。端点、MCP 工具、组件和 BackgroundService 仅进行编排 — 它们从不做决策。规则如下:

  • 禁止公共 setter;状态变更通过保护不变式的意图明确方法进行。
  • 聚合根通过强 ID 相互引用,而不是导航属性。
  • 一次 SaveChanges 只能改变一个聚合根;跨聚合根流程使用域事件。
  • 跨越域边界的原始类型应包装在值对象中。
  • 不变式违反会抛出 Core DomainException,而不是框架异常。

后果​

  • 域规则可在没有数据库或 Web 主机的情况下进行单元测试。
  • Core 纯度由 ArchitectureGuardTests 强制执行,如果破坏将导致构建失败。
  • 相比贫血模型,存在更多的仪式(值对象、强 ID、域事件) — 这是保持资金转移规则正确且集中的有意成本。