DDD:从聚合到函数组合的改变
💡
原文约1200字/词,阅读约需3分钟。
📝
内容提要
作者从经典聚合开始,发现领域驱动设计和面向对象模式促使他更多地思考数据而非业务逻辑。作者研究如何更好地进行建模并将其反映在代码中,对简单性的追求已经开始。同时,作者在 TypeScript 方面做了很多工作,对代数类型的编码有了新视角。使用不可变结构使代码更容易被信任。文章讨论了事件溯源的问题,认为它试图从完全形式上提供一劳永逸的方式,与分布式事务一致,将形式与状态内容区分开来。
🎯
关键要点
- 作者从经典聚合开始,遵循领域驱动设计和面向对象模式,强调数据而非业务逻辑。
- 通过讨论,作者意识到面向对象封装的价值,但认为“类”不是唯一实现方式。
- 作者追求简单性,研究如何更好地建模并反映在代码中。
- 在事件溯源方面的学习让作者意识到经典面向对象风格与事件溯源流的不匹配。
- 事件流被视为故事,实体状态机类似于主角,每个状态是不同的聚合。
- 作者在TypeScript方面的工作让其对代数类型编码有了新视角。
- 作者认为数据+函数的理解容易,但可能导致贫血领域模型。
- 实体+函数的组合比许多面向对象实现更丰富,控制复杂性和认知负荷的关键在于小块组合。
- 使用不可变结构使代码更容易被信任,避免了重复验证。
- 事件溯源忽视了BC上下文限制,聚合与上下文BC有关,业务系统的独特性随时间变化而变化。
- 事件溯源试图提供一劳永逸的方式,与分布式事务一致,值得探索无状态与有状态的分离。
➡️