什么是贫血模型,充血模型?为什么我们会强制要求使用贫血模型?

DDD领域模型、贫血模型、充血模型概念总结 DDD领域模型 领域模型是对领域内的概念类或现实世界中对象的可视化表示。又称概念模型、领域对象模型、分析对象模型。它专注于分析问题领域本身,发掘重要的业务领域概念,并建立业务领域概念之间的关系。 业务对象模型(也叫领域模型 domain model)是描述业务用例实现的对象模型。它是对业务角色和业务实体之间应该如何联系和协作以执行业务的一种抽象。业务对象模型从业务角色内部的观点定义了业务用例。该模型为产生预期效果确定了业务人员以及他们处理和使用的对象(“业务类和对象”)之间应该具有的静态和动态关系。它注重业 阅读详情

这里是修真院后端小课堂,每篇分享文从

大家好,我是IT修真院深圳分院王东东,一枚正直纯洁善良的JAVA程序员。

本篇分享的是:【什么是贫血模型,什么是充血模型?为什么我们会强制要求使用贫血模型?】

一、背景介绍

领域模型是对领域内的概念类或现实世界中对象的可视化表示。又称概念模型、领域对象模型、分析对象模型。分为四类:失血模型,贫血模型,充血模型,胀血模型。

二、知识剖析

1.什么是贫血模型?

贫血模型是指使用的领域对象中只有setter和getter方法(POJO),所有的业务逻辑都不包含在领域对象中而是放在业务逻辑层。

2.什么是充血模型?

充血模型将大多数业务逻辑和持久化放在领域对象中,业务逻辑只是完成对业务逻辑的封装、事务和权限等的处理。比较符合面向对象。

三、常见问题

为什么要强制使用贫血模型?

四、解决方案

系统的层次结构清楚,各层之间单向依赖。

耦合度低,方便后期的更新与维护。

设计简单,底层模型稳定。

五、编码实战

六、扩展思考

贫血模型与充血模型的对比:

他们最大的不同就是如何划分业务逻辑。

贫血模型实体类只有SET GET方法,逻辑基本在服务层实现,代码集中在Service层。耦合性很小,方便团队合作。

充血模型的实体类里不但有状态,还有行为,即属性和方法都有。它的Service层很薄,业务逻辑只是完成对业务逻辑的封装、事务和权限等的处理。对个人技术水平要求较高。

注:本人初学java者,如有不对敬请指出,谢谢!

七、参考文献

百度百科、博客园、优快云

八.更多讨论

1.贫血模型里没有实现方法,那它的增删改查是在哪实现的?

贫血模型需要玻璃处DB层专门用于数据库操作。

2.贫血模型有什么缺点?

逻辑集中在Service层,导致Service太过厚重。

3.典型的WEB应用中使用贫血模型,还是充血模型?为什么?

使用贫血模型

典型的web应用中,简单的CRUD操作占据了业务逻辑的绝大多数比例,可以避免了业务逻辑不得不大量封装DAO接口的问题,简化了软件架构设计,节省了大量的业务层代码量。

(1)它是基于组件技术的。全部的应用对象,无论控制器和视图,还是业务对象之类的都是 java组件.并且和Spring提供的其他基础结构紧密集成.

(2)

不依赖于Servlet API(目标虽是如此,但是在实现的时候确实是依赖于Servlet的)

(3)可以任意使用各种视图技术,而不仅仅局限于JSP

(4) 支持各种请求资源的映射策略

(5)它应是易于扩展的

【修真院java小课堂】什么是贫血模型,什么是充血模型?为什么我们会强制要求使用贫血模型? 大家好,我是IT修真院深圳分院第十三期学员王东东,一枚正直纯洁善良的JAVA程序员。 今天给大家分享一下,修真院官网JAVA任务一,扩展思考中的知识点——什么是贫血模型,什么是充血模型?为什么我们会强制要求使用贫血模型?。 一、背景介绍 领域模型是对领域内的概念类或现实世界中对象的可视化表示。又称概念模型、领域对象模型、分析对象模型。分为四类:失血模型,贫血模型,充血模型,胀血模型。 二、知识剖析... 阅读详情

相关推荐

(开始实战)WebApi第8讲:DbFirst(Entities实体)、查询数据库数据(上下文、using、依赖注入)、CodeFirst(Contexts)、充血(DDD)贫血(Service)

DbContext),能DbContextDispose对前端友好:前端可以直接将JSON格式的配置文件转换成JavaScript对象,从而方便地在前端应用程序中使用这些配置信息。这降低了前后端之间的数据交换复杂度,提高了开发效率。对后端友好:随着Newtonsoft等JSON反序列化库的出现,后端也可以轻松地解析和处理JSON格式的数据。这使得后端应用程序可以方便地读取和使用appsettings.json文件中的配置信息,而无需进行复杂的格式转换。

m0_74823611的博客 1065

【架构师基本功】贫血/充血模型

它将业务逻辑和数据操作封装到实体中,实体包含了数据和操作数据的业务逻辑,以及实体之间的关系。其核心理念是将应用程序的逻辑和数据分离,数据对象仅包含属性和方法,将数据和表现分离,这样可以使实体对象具有最小的逻辑,代码重用性和可维护性都得到提高。问题领域建模是软件开发过程中非常重要的一步,它可以帮助开发者从业务用户的角度出发,抽象出业务实体以及实体之间的关系,并进一步细化业务实体的属性和行为,为后续的充血模型提供基础。贫血模型指的是将数据和操作分离,在数据对象中只包含数据,而操作则全部放在业务逻辑层中实现。

我是Java程序员廖志伟,感谢朋友们的支持! 4802

STM32H7+LAN8720A之ETH与LWIP配置问题(End)

开篇介绍 由于项目中需要使用到STM32H7系列的芯片,且该系列无法移植ST的标准库,只能使用ST的HAL库,通过STM32Cube生成HAL库的基本代码。在项目开发中需要使用到STM32板载的ETH口,在简化的四层模型中充当着数据链路层的角色,我们只需添加PHY并配置好IP,即可实现基本的TCP主从机通信、UDP通信等等。 一、激光雷达3i-T1 由于使用了一款只具有网口通信的单线激光雷达,其具有TCP和UDP方式的通信方式,为了避免进行TCP中的socket报文解析和繁琐的通信握手过程,我们首先将雷达配

weixin_42024702的博客 1万+

什么是充血模型与贫血模型?

充血模型(Domain Driven Design)是一种面向对象的软件设计方法,它强调将业务逻辑封装在领域对象中。假设有一个电商网站,需要对商品进行购买、库存管理等操作。在充血模型中,我们可以定义一个 Product 类来表示商品。Product 类会包含商品的属性(例如名称、价格、库存等),并且也会包含一些行为(例如购买商品、更新库存等)。这些行为是直接封装在 Product 类中的,以便于对商品进行操作。

qq_38196449的博客 2454

Python开发者必看:5分钟搞定Gemini API的3种调用方式(含代码示例)

本文为Python开发者详细介绍了三种高效调用Gemini API的核心方式:基础同步调用、流式调用和聊天模式,并涵盖多模态应用等高级特性。通过清晰的代码示例和实战场景分析,帮助开发者快速掌握Gemini API的集成与优化,提升AI应用开发效率。

g8f9d0s1a2的博客 1120

VS code 调试显示preLaunchTask“g++“已终止,退出代码为-1。 生成‘... .exe‘文件错误

总结: 以后每个工程都需要按照这样的流程:创建一个.c/.cpp文件 -> F5运行 -> 配置tasks.json文件-> launch.json文件 -> 运行

qq_45151652的博客 2513

第三章:DDD四种模型详解

在上一章中我们通过一些案例分析了解到了在设计我们的对象和功能时如何去定义我们的DP,本章带着大家系统的了解一下在我们开发时经常遇到的四种领域模型。

zhiyikeji的博客 3427

大厂硬件笔试机试题ASIC设计方向-卷3

本文提供了30道硬件工程师机试题目,涵盖数字逻辑、模拟电路、CMOS和信号处理等核心领域。选择题和判断题均配有详细解析,重点考察Verilog编程、CMOS特性、触发器设计、采样定理等知识点。题目难度适中但覆盖面广,如Verilog中阻塞/非阻塞赋值的区别、CMOS静态功耗来源、Nyquist采样定理、通用逻辑门判断等。备考建议强调掌握逻辑门设计、Verilog时序电路编写和CMOS特性理解。这些题目反映了华为等大厂硬件机试的典型考查内容,通过系统复习可有效提升机试成绩,为后续面试奠定基础。

启芯硬件的博客 541

什么是贫血模型,什么是充血模型?为什么我们会强制要求使用贫血模型?

这里是修真院后端小课堂,每篇分享文从 八个方面深度解析后端知识/技能,本篇分享的是: 【什么是贫血模型,什么是充血模型?为什么我们会强制要求使用贫血模型?】 大家好,我是IT修真院深圳分院第十三期学员王东东,一枚正直纯洁善良的JAVA程序员。 今天给大家分享一下,修真院官网JAVA任务一,扩展思考中的知识点——什么是贫血模型,什么是充血模型?为什么我们会强制要求使用贫血模型?。 一、背景介绍 领域...

learning__java的博客 888

华为s110、s220、s310、s530、s620 配置ssh,配置web登录

在服务器端创建SSH用户。

送个祝福给小豪的博客 317

【HAL库】STM32CubeMX开发----STM32F407----ETH+LAN8720A+LWIP----ping通

本次实验以芯片为MCU,使用25MHz外部时钟源。以太网PHY层芯片为LAN8720A,由MCU引脚PA8提供时钟。

MQ0522的博客 4841

php贫血模型充血模型,什么是贫血模型,什么是充血模型?为什么我们会强制要求使用贫血模型?...

这里是修真院后端小课堂,每篇分享文从【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】八个方面深度解析后端知识/技能,本篇分享的是:【什么是贫血模型,什么是充血模型?为什么我们会强制要求使用贫血模型?】大家好,我是IT修真院深圳分院第十三期学员王东东,一枚正直纯洁善良的JAVA程序员。今天给大家分享一下,修真院官网JAVA任务一,扩展思考中的知识点——...

weixin_31083901的博客 224

置顶必读(3) |《滚雪球学SpringBoot》· 高质量专栏介绍,你值得拥有!

《滚雪球学SpringBoot》 并不是普通的技术讲解合集,它是专为开发者精心设计的系统化学习路径。通过不断“滚动学习”,我们将带领你从基础入门到高阶应用,从理解每一行代码到设计和优化大规模分布式系统,最终帮助你成长为一位精通 spring架构 的工程师。

**My Coding Family** 15万+

贫血模型和充血模型

Martin Fowler很早以前就写过一篇文章,题目叫"贫血模型"。文章里面批判贫血的领域模型是不够优雅、不够OO的,提倡使用充血的领域模型。在Java世界里这是一直争论的话题。到底什么是贫血什么是充血呢?贫血模型:是指领域对象里只有get和set方法,或者包含少量的CRUD方法,所有的业务逻辑都不包含在内而是放在Business Logic层。优点是系统的层次结构清楚,各层之间单向依赖,Cli

always_my_fault的专栏 1万+

YOLOv11改进,YOLOv11引入B2CNet的BFAM(双时相特征聚合模块),JSTARS 2024,二次创新C3k2结构

YOLOv11改进,YOLOv11引入B2CNet的BFAM(双时相特征聚合模块),JSTARS 2024,二次创新C3k2结构

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 406

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

你真的面向对象了吗?充血模式和贫血模式

还记得我们刚开始学面向对象的时候吗?对象里面有什么?属性和行为。但时至今日,我们的对象只有属性,何来行为一说呀! 充血模式和贫血模式 贫血模型:是指领域对象里只有get和set方法,或者包含少量的CRUD方法,所有的业务逻辑都不包含在内而是放在Business Logic层。 优点是系统的层次结构清楚,各层之间单向依赖,Client->(Business Facade)->Busi...

厚积薄发 870

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

贫血,充血模型的解释以及一些经验(非常经典)(非原创)

出处:http://www.cnblogs.com/generalxu/archive/2009/01/14/1375427.html 为了补大家的遗憾,在此总结下ROBBIN的领域模型的一些观点和大家的补充,在网站和演讲中,robbin将领域模型初步分为4大类:1,失血模型2,贫血模型3,充血模型4,胀血模型那么让我们看看究竟有这些领域模型的具体内容,以及他们的优缺点: 一、失血模型 失血模型...

weixin_34326179的博客 116

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

DDD架构实战 充血模型 电商订单

充血模型是一种领域驱动设计(DDD)的核心模式,强调领域对象既包含数据属性又包含业务逻辑方法。它将业务规则集中封装在领域层,使模型更贴近真实业务场景。充血模型具有强封装性、支持复杂业务逻辑、便于领域知识传递等特点,相比贫血模型在逻辑一致性、可维护性、健壮性等方面更具优势。实现要点包括明确实体与值对象划分、合理使用领域服务和事件、采用仓储模式等。尽管存在建模门槛高、初期成本高等挑战,但在金融、电商等复杂业务系统中具有显著价值。该模型通过"数据与行为绑定"的设计,将业务逻辑回归到领域本身,是

多多的博客 1988

从贫血到充血Domain Model

关于Domain Model的讨论已经非常多了,炒炒冷饭,这里是自己的一些做法。以Workitem(工作流里的工作项)作为例子。最开始的做法:一个实体类叫做Workitem,指的是一个工作项或者称为任务项一个DAO类叫做WorkitemDao一个业务逻辑类叫做WorkitemManager(或者叫做WorkitemService)主要看看WorkitemManager,因为主要逻辑集中在这里 pu...

要思考 179

DDD领域驱动与传统CRUD

DDD 是一套的设计方法论,核心是,避免技术实现与业务需求脱节。

qq_53868937的博客 1017

(开始实战)WebApi第8讲:DbFirst(Entities实体)、查询数据库数据(上下文、using、依赖注入)、CodeFirst(Contexts)、充血(DDD)/贫血(Service)

Dispose。

weixin_54966200的博客 1873

领域层 vs 实体层的本质区别

领域层与实体层的核心差异在于:领域层是业务模型,封装丰富的行为逻辑;实体层仅为数据载体,缺乏业务行为。传统三层架构中的实体层(贫血模型)只有数据属性和getter/setter,业务逻辑分散在Service层。而DDD的领域层(充血模型)将数据和行为紧密结合,通过方法表达业务规则,确保一致性。贫血模型适合简单CRUD应用,充血模型更适合复杂业务系统。架构选择应基于业务复杂度,领域层能更好地应对变化需求。

m0_65159391的博客 625

任务的总结

4.为什么要用Log4j来替代System.out.println?https://www.jianshu.com/p/3518854f10861.背景介绍记录日志可以作为日后处理问题的一个追溯,方便开发者根据日志来统计查询处理问题。此外,查阅日志内容可以了解项目的运行状况,发现项目存在的一些隐藏的bug。2.知识剖析Log4j是什么?Log4j 是Apache的一个开放源代码项目,通过使用Log...

thelostworld 110
上一篇: 如何使用mybatis generator代码生成?
下一篇: 如何使用公司框架生成代码搭建项目
learning__java
博客等级 码龄8年 87粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值