1.失血模型
数据对象中只有只有属性和set和get方法,业务逻辑层里包含了几乎所有的逻辑,不重要几乎不用
特点:对象中只包含get set方法
优点:领域对象结构简单
缺点:1.肿胀的业务逻辑代码,难以维护
2.无法应对频繁更改的需求
2.贫血模型
数据对象在失血模型中的数据对象的基础上添加固有行为
固有行为:可以理解为本能行为,如睡觉吃饭走路等,正常人都拥有这种行为。
非固有行为:如打游戏、识别文字,都是一些后天的行为,部分人才有
优点:层次结构清晰,各层级单向依赖
对只有少量业务逻辑的应用来说,使用起来非常自然
缺点:无法良好的应对非常复杂的逻辑和场景
这种模型是Spring一致引领的方向,所以非常的流行用途极广
3.充血模型
更加符合面相对象的设计
其实它是没有单独持久层的,持久化的逻辑放在领域对象当中
所以上面的图我们也可以改为:
数据对象和业务逻辑是平行逻辑
优点:1.更加符合面相对象的原则
2.业务逻辑层很薄,薄到几乎完全符合单一职责原则
缺点:1.职责不好划分(无专门的持久层),要求开发者水平要很高
2.模型中包含了大量的操作,实例化的时候增加很多不必要的消耗,会实例化很多的关联对象
4.胀血模型
优点:1.简化了分层架构
2.也算是符合面向对象的设计原则
缺点:1.取消了业务逻辑层,直接在domain Object(领域对象)上封装事务以及授权,授权很多原本不属于这个领域对象的逻辑,模型不稳定,代码缺乏可维护的稳定性