贫血模型和充血模型
贫血模型和充血模型
贫血模型 | 充血模型 |
---|---|
事务脚本模式 | 领域模型模式 |
只包含属性,get和set | 不仅包含属性,还包含业务逻辑 |
只有状态,没有行为 | 既有状态,也有行为 |
贫血模型
贫血模型下领域对象只有所有属性的get/set方式,以及少量简单的属性值转换,不包含任何业务逻辑,不关心对象持久化,只是用来做为数据对象的承载和传递的介质;
优点:结构简单,职责单一,相互隔离性好,使用单例模型提高运行性能;
缺点:对象状态与行为分离,不能直观地描述领域对象。行为的设计主要考虑参数的输入和输出而非行为本身,不太具有面向对象设计的思考方式。行为间关联性较小,更像是面向过程式的方法,可复用性也较小。
注:Spring Boot 采用单例模式,尽量不手动创建对象,对象无状态化,故较推荐使用贫血模型。
充血模型
充血模型下领域对象不仅有属性行为,包含此领域相关的业务逻辑,同时也包含对领域对象的持久化操作。
优点:对象自洽程度很高,表达能力很强,因此非常适合于复杂的企业业务逻辑的实现,以及可复用程度比较高,更符合面向对象设计思想;
后记
贫血模型它完全和面向对象设计背道而驰,是反模式的。
面向对象设计主张将数据和行为绑定在一起,而贫血领域模型则更像是一种面向过程设计;充血模型,则真正的遵守面向对象编程思想,真正的体现软件设计的高内聚,低耦合理念!
面向对象设计的本质是:“一个对象是拥有状态和行为的”。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
2019-08-31 好词好句