DDD学习记录
- DDD 是一个的软件设计方法论;DDD 的核心理念:将“真实物理世界”同构化映射为“虚拟代码世界”;
- Service 层实现类代码的逻辑写的很长,且完全是“平铺直述”的。这种代码,说白了就是“CRUD+计算逻辑”组合的代码;这种代码,我们就叫做”事务脚本式”代码,或者说叫“贫血模型”代码。
- ”事务脚本式”代码,简单来说,事务脚本就是采用过程式的编程方式,业务逻辑根据流程一次组装在方法中,每个方法是一个业务的执行体,类似于某个业务的执行脚本,所以叫事务脚本;
- “贫血模型”代码,是因为 entity 层的那些 POJO 对象如 Order 等,没有任何业务行为的封装(比如:Order 类应该自己生成自己的订单号、提货号等),只有属性而没有行为的对象,就是“贫血”对象,基于“贫血”对象实现的业务逻辑代码,就叫“贫血模型”代码。
- 学习延伸:“充血模型”代码,充血模型是相对贫血模型来说的,充血模型认为一个模型不仅应该有其必备的属性、也应该有其所具备的行为。例如一个Person模型,除了具备Person必备的name,age等属性外,也应该有changeAddress(Address address) 等自己的行为方法,这样Person才是一个完整的个体。
- DDD 战略设计,就是识别出有哪些限界上下文、以及清晰的定义限界上下文的关系和边界。
- 限界上下文就是目标系统内部最粗粒度的模块划分,这个粒度的模块划分往往是后续“微服务”怎么切分的主要依据。
- 限界上下文映射就是搞清楚这些“限界上下文”模块之间是怎样的协作关系(调用关系、事件通知关系等等)。
- DDD 战术设计,核心就是完成“领域”层内的“聚合”、“领域服务”的设计,也就是“核心业务逻辑”的设计。
推荐阅读:DDD 实战