贫血模型和充血模型的概念, 大概是来源于 Martin Folwer 的《企业应用架构模式》一书.
领域驱动设计也是来自于 2004 年出版的《领域驱动设计》一书.
都算不得什么新鲜概念, 但是这两种不同的开发模式和区别一直少有人提及, 因为工作中只有基于贫血模型开发这样一种方式.
随着微服务的兴起, 领域驱动设计也跟着流行, 面向对象的开发方式也开始有了热度, 然后本篇也出现贫血模型和充血模型这样面向对象概念的讨论.
打卡
打卡12:
今天学习: 设计模式11课, 两种 Web 开发模式
收获: 理解了基于贫血模型的传统 web 开发模式和基于充血模型的 DDD Web 开发模式的概念及其区别.
基于贫血模型的传统 web 开发模式
基于 MVC 架构的三层模型进行开发, 将数据与业务分离, 数据在 BO 中, 业务逻辑则在 Service 层, 其违背了面向对象的封装原则, 是一种面向过程的开发方式.
虽然是是一种面向过程的开发方式 存在代码难以复用和维护等问题, 但这依然是目前最流行的 Java Web 开发方式:
- 大部分的项目业务逻辑简单, 只是 CRUD 操作, 不需要设计;
- 基于充血模型的开发方式, 需要事前进行领域分析和建模, 门槛较高;
- 长期以来都是基于这种方式进行开发, 改变需要一定的学习成本;
基于充血模型的 DDD Web 开发模式
也是基于 MVC 架构的三层模型进行开发, 但是数据和业务逻辑是封装在 Domain 中的, Serice 层只做普通调用, 是一种面向对象的开发方式.
这种开发方式很早就存在, 但是一直不流行, 随着微服务概念的流行, 基于领域驱动设计的开发方式才开始收到关注. 因为基于领域驱动设计的开发方式可以很好地将业务拆分成一个个小的服务或组件.
区别
- 基于贫血模型的开发方式, 是一种以 SQL 驱动业务的开发方式, 不需要提前设计, 上手快, 适合业务简单的项目; 项目越复杂, 代码就越越复杂, 难以复用和维护;
- 基于充血模型的开发方式, 则需要对领域进行良好的分析和设计, 开发起来有一定的门槛, 适合业务较复杂的项目, Domain 作为可复用的模块单元, 代码更方便维护和扩展.