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

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

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

八个方面深度解析后端知识/技能,本篇分享的是:

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

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

今天给大家分享一下,修真院官网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

HAL库:中断处理函数 及 weak弱声明中断回调函数 详解

HAL库中断处理函数 及 weak弱声明中断回调函数

L_Z_J_I的博客 5161

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

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

qq_38196449的博客 2454

基于Zynq的便携式γ能谱仪设计与实现

数字多道分析器(DMCA)是核辐射能谱测量的核心设备,其本质是将探测器输出的模拟脉冲按幅度数字化分道,构建能量-计数分布曲线,从而支撑放射性核素识别与定量分析。其技术原理依赖高速采样、数字滤波成形、基线恢复与峰值提取等关键信号处理环节,具备高分辨率、优线性度与强抗干扰能力。在环境监测、核安全巡检与野外地质勘探等场景中,对低功耗、小型化、实时性提出严苛要求。本方案采用Xilinx Zynq-7020异构SoC架构,融合FPGA实时数字信号处理与ARM嵌入式控制,实现软硬协同优化,兼顾算法精度与工程落地性,为国

weixin_33173126的博客 190

CTF-MISC:BUUCTF练习汇总(1-25题,不包括签到题)

解题思路:该题比较基础,wireshark打开过滤HTTP流量包,追踪HTTP流后可以看到base64密文,解密后得到jpg图片,打开图片即可看到flag,在线OCR识别即可提取出flag值。解题思路:zip压缩包解压需要密码,图片中的盲文为解压的密码,解压后得到MP3音频文件,内容为典型的摩斯密码;解题思路:由题目可以为LSB隐写,使用StegSolve打开图片查看最低有效位得到PNG信息,另存为图片后发现是二维码,扫描后即可得到flag。对应摩斯电码为:-.-. - …-. .-- .–. . …

燕麦葡萄干的博客 1万+

第三章:DDD四种模型详解

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

zhiyikeji的博客 3427

遗传算法解整数规划IntCon

x = ga(fun,nvars,A,b,[],[],lb,ub,nonlcon,IntCon) IntCon就是代表整数的参量,描述的是哪几个自变量是0-1整数变量。比如navrs设置有4个变量,设置IntCon为[2 3],代表第2和第3个变量是整数。 再比如设置IntCon=2:2:nvars,代表偶数项的变量是整数。 值得注意的是一旦设置了非空的IntCon,则Aeqandbeqmust be an empty entry ([]), andnonlconmust re...

jianti9962的博客 9219

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

这里是修真院后端小课堂,每篇分享文从 大家好,我是IT修真院深圳分院王东东,一枚正直纯洁善良的JAVA程序员。 本篇分享的是:【什么是贫血模型,什么是充血模型?为什么我们会强制要求使用贫血模型?】 一、背景介绍 领域模型是对领域内的概念类或现实世界中对象的可视化表示。又称概念模型、领域对象模型、分析对象模型。分为四类:失血模型,贫血模型,充血模型,胀血模型。 二、知识剖析 1.什么是贫血模型? 贫...

learning__java的博客 422

【全部更新】2025金地杯E题山西省大学生数学建模思路代码文章教学:高速铁路牵引供电系统能耗优化

问题四将列车的运行速度与发车时间同时作为优化变量,建立联合优化模型,目标是在考虑电价机制和调度均衡性的前提下,使牵引供电系统一天内的总电费支出最小。问题三在考虑分时电价机制的基础上,基于遗传算法优化列车速度组合,使牵引供电系统一天内的总电费支出最小。然而,在实际运营中,不同时段的电价差异显著,合理安排列车的运行时间与运行速度,可有效降低系统的总电费支出。本研究聚焦于高速铁路牵引供电系统的能耗与电费优化问题,针对列车运行速度、发车时间与分时电价的综合影响,提出一系列数学模型,以实现系统能耗与电费的最小化。

xb459149247的博客 5289

人体红外传感器HC-SR501

本文记录的是如何用stm32使用HC-SR501。实验平台:野火指南者stm32f103vet6。实验现象:一旦有人体经过,LED会亮红色。HC-SR501 传感器工作原理人体都有恒定的体温,一般在 37 度,所以会发出特定波长 10UM 左右的红外线,被动式红外探头就是靠探测人体发射的 10um 左右的红外,进行工作的。人体发射的 10um 左右。

weixin_43772611的博客 1万+

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

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

weixin_31083901的博客 224

6、业务影响分析(BIA)的数据收集与关键指标评估

本文全面解析了业务影响分析(BIA)的核心内容,包括数据收集、业务流程分析、信息系统与资产清单、人员与供应商依赖、影响声明、关键指标评估(如MTD、RTO、RPO)、威胁建模与风险分析等。通过详细的介绍和图表展示,帮助组织系统性地制定灾难恢复计划,以应对各种潜在风险,确保关键业务流程在灾难发生后能够快速恢复并持续运营。

moss5的博客 374

贫血模型和充血模型

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

always_my_fault的专栏 1万+

ROS2 Nav2 - 模型预测路径积分控制器(MPPI)

这是一个预测控制器(局部轨迹规划器),用于实现模型预测路径积分(MPPI)算法,以跟踪具有自适应避障功能的路径。它包含基于插件的 critic 函数,可影响算法的行为。它由 Aleksei Budyakov 创建,由 Steve Macenski 为 Nav2 进行改编和开发。该插件实现了 nav2_core::Controller(控制器)接口,可在整个导航堆栈中作为控制器服务器的动作服务器(controller_server)中的局部轨迹规划器使用。据测定,该控制器可在中等英特尔处理器(第四代 i5)上

机器人控制与仿真应用 3907

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

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

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

厚积薄发 870

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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

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

weixin_34326179的博客 116

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

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
上一篇: SpringCloud简单介绍
下一篇: 什么是IO流?
learning__java
博客等级 码龄8年 87粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值