贫血模型,充血模型(领域驱动设计)
很多业务系统都是基于 MVC 三层架构来开发的。虽然这种开发模式已经成为标准的 Web 项目的开发模式,但它却违反了面向对象编程风格,是一种彻彻底底的面向过程的编程风格。 MVC 三层架构中的 M 表示 Model,V 表示 View,C 表示 Controller。它将整个项目分为三层:展示层、逻辑层、数据层。MVC 三层开发架构是一个比较笼统的分层方式,落实到具体的开发层面,很多项目也并不会 100% 遵从 MVC 固定的分层方式,而是会根据具体的项目需求,做适当的调整。
目前几乎所有的业务后端系统,都是基于贫血模型的。
贫血模型(Anemic Domain Model)
很多业务系统都是基于 MVC 三层架构来开发的。实际上,更确切点讲,这是一种基于贫血模型的 MVC 三层架构开发模式。
在贫血模型中,数据和业务逻辑被分割到不同的类中。
领域驱动设计(Domain Driven Design,简称 DDD)充血模型(Rich Domain Model)
数据和对应的业务逻辑被封装到同一个类中。
领域驱动设计,即 DDD,主要是用来指导如何解耦业务系统,划分业务模块,定义业务领域模型及其交互。
除了监控、调用链追踪、API 网关等服务治理系统的开发之外,微服务还有另外一个更加重要的工作,那就是针对公司的业务,合理地做微服务拆分。而领域驱动设计恰好就是用来指导划分服务的。所以,微服务加速了领域驱动设计的盛行。领域驱动设计有点儿类似敏捷开发、SOA、PAAS 等概念,听起来很高大上,但实际上只值“五分钱”。
面向过程编程风格有种种弊端,比如,数据和操作分离之后,数据本身的操作就不受限制了。任何代码都可以随意修改数据
为什么基于贫血模型的传统开发模式如此受欢迎?
第一点原因是,大部分情况下,我们开发的系统业务可能都比较简单,简单到就是基于 SQL 的 CRUD 操作.
第二点原因是,充血模型的设计要比贫血模型更加有难度。
第三点原因是,思维已固化,转型有成本。
什么项目应该考虑使用基于充血模型的 DDD 开发模式?
基于充血模型的 DDD 开发模式,更适合业务复杂的系统开发。比如,包含各种利息计算模型、还款模型等复杂业务的金融系统。
这两种开发模式,落实到代码层面,区别不就是一个将业务逻辑放到 Service 类中,一个将业务逻辑放到 Domain 领域模型中吗?为什么基于贫血模型的传统开发模式,就不能应对复杂业务系统的开发? 那就是两种不同的开发模式会导致不同的开发流程。基于充血模型的 DDD 开发模式的开发流程,在应对复杂业务系统的开发的时候更加有优势。
贫血模型,充血模型(领域驱动设计)相关推荐
- DDD领域驱动设计浅谈
DDD领域驱动设计是什么 1 DDD是什么? DDD是领域驱动设计,是Eric Evans于2003年提出的,离现在有17年. DDD名为:Domain Driven Design (领域驱动设计) ...
- 【吐血推荐】领域驱动设计学习输出
一.Hello DDD 刚开始接触学习「DDD - 领域驱动」的时候,我被各种新颖的概念所吸引:「领域」.「领域驱动」.「子域」.「聚合」.「聚合根」.「值对象」.「通用语言」.....总之一大堆有关 ...
- 领域驱动设计(DDD)的精髓
边界是核心 无论是从宏观到微观再到纳米层次,还是从战略设计推进到战术设计,领域驱动设计一直强调的核心思想,就是对边界的划分与控制. 从分析需求一开始,我们就需要通过确定项目的愿景与目标,划定问题空间, ...
- DDD领域驱动设计深度解析
目录 DDD领域驱动设计深度解析 DDD凝聚了软件工程的智慧 DDD领域驱动设计的历史 什么是领域 Domain 领域驱动设计 领域驱动设计几大原则详解 领域驱动模型的概念 领域驱动设计的挑战 DDD ...
- DDD领域驱动设计 — 贫血模型与充血模型
文章转载来源:https://juejin.cn/post/6917125801460629518 | 前言 要想深入掌握和了解 DDD 领域驱动设计的核心,那无论如何也绕不开两大较为抽象的概念-- ...
- DDD 领域驱动设计:贫血模型、充血模型的深入解读!
作者:JavaEdge在掘金 链接:https://juejin.cn/post/6917125801460629518 - 前言 - 要想深入掌握和了解 DDD 领域驱动设计的核心, ...
- DDD 领域驱动设计:贫血模型、充血模型的深入解读
点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 后台回复"k8s",可领取k8s资料 - 前言 ...
- java充血模型orm框架,关于领域驱动设计和贫血、失血、充血模型
大部分应用Spring框架的Java Web应用都相当关注单一职责原则和关注分离原则,但是在此之上却诞生了一些不太好的反模式和设计原则,比如: 领域模型对象只是用来存储应用的数据.(领域模型使用了贫血 ...
- DDD(领域驱动设计)系列主题:失血模型,贫血模型,充血模型和胀血模型详细解读和代码案例说明!
目录 失血模型,贫血模型,充血模型和胀血模型定义及优点和缺点 失血模型 贫血模型 充血模型 胀血模型 失血模型,贫血模型,充血和胀血代码样例 失血模型代码样例 贫血模型代码样例 充血模型代码样例 DD ...
最新文章
- [问题]DotNet 项目如何实现在构建时 Build 号自动增加?
- Android locksettings/gatekeeper代码导读
- k8s 多租户_k8s使用rbac实现多租户
- 安装Linux显示内部错误,Ubuntu14.04安装XRDP远程连接及显示内部错误解决方案
- java inputtools_Java后台开发常用工具类
- 基于JAVA springboot+mybatis 电商书城平台系统设计和实现
- 学前端可以做哪些功能?
- 为什么我会放弃 Webpack 而选择 Vite
- java 面试 —— java 基础
- Python的动态特性(类实例增加属性,动态变量类型)
- 思凡软件(思凡全功能拓扑检查工具)
- 安全测试工具APPScan下载安装及简单使用
- 实时可视化大数据项目05 -- UI界面
- 【愚人节专场】Java实现定时发送小情话
- Google Play支付 接入配置
- linux gif 编辑软件,Ubuntu 16.10 安装byzanz截取动态效果图工具
- CISP-PTE是什么证书,CISP-PTE证书有什么用?
- 数据库DevOps:我们如何提供安全、稳定、高效的研发全自助数据库服务-iDB/DMS企业版...
- 编码学习——UTF-8与Unicode互转具体流程
- java:数学运算的取最大、最小、绝对值的函数方法
热门文章
- PHP HashTable总结
- 用户 'XXX\SERVERNAME$' 登录失败。 原因: 找不到与提供的名称匹配的登录名。 [客户端: ]...
- mybatis入门-第一个程序
- Excel教程(12) - 数学和三角函数
- 关于datagrid中控件利用js调用后台方法事件的问题
- 搞明白这八个问题,Linux系统就好学多了
- Android应用中网络请求库Volley的使用
- EventHandler, EventArgs
- 用页传值方式解决模态窗口的Response.WriteFile文件下载
- 动态二维数组赋值及for循环遍历和toString遍历