0001 — 严格 DDD 与纯 Core
背景
此应用处理真实的资金流动。分散在端点、后台服务和 Razor 组件中的业务规则容易变成不可测试、行为不一致的代码 — 这正是一个 bug 会给用户造成资本损失的地方。
决策
域逻辑存在于 src/Core 中的聚合根、值对象和域服务上,它们编译时零基础设施依赖(没有 EF、HttpClient、Docker 或 ASP.NET)。端点、MCP 工具、组件和 BackgroundService 仅进行编排 — 它们从不做决策。规则如下:
- 禁止公共 setter;状态变更通过保护不变式的意图明确方法进行。
- 聚合根通过强 ID 相互引用,而不是导航属性。
- 一次
SaveChanges只能改变一个聚合根;跨聚合根流程使用域事件。 - 跨越域边界的原始类型应包装在值对象中。
- 不变式违反会抛出 Core
DomainException,而不是框架异常。
后果
- 域规则可在没有数据库或 Web 主机的情况下进行单元测试。
Core纯度由ArchitectureGuardTests强制执行,如果破坏将导致构建失败。- 相比贫血模型,存在更多的仪式(值对象、强 ID、域事件) — 这是保持资金转移规则正确且集中的有意成本。