很多业务系统都是基于 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 开发模式的开发流程,在应对复杂业务系统的开发的时候更加有优势。

贫血模型,充血模型(领域驱动设计)相关推荐

  1. DDD领域驱动设计浅谈

    DDD领域驱动设计是什么 1 DDD是什么? DDD是领域驱动设计,是Eric Evans于2003年提出的,离现在有17年. DDD名为:Domain Driven Design (领域驱动设计) ...

  2. 【吐血推荐】领域驱动设计学习输出

    一.Hello DDD 刚开始接触学习「DDD - 领域驱动」的时候,我被各种新颖的概念所吸引:「领域」.「领域驱动」.「子域」.「聚合」.「聚合根」.「值对象」.「通用语言」.....总之一大堆有关 ...

  3. 领域驱动设计(DDD)的精髓

    边界是核心 无论是从宏观到微观再到纳米层次,还是从战略设计推进到战术设计,领域驱动设计一直强调的核心思想,就是对边界的划分与控制. 从分析需求一开始,我们就需要通过确定项目的愿景与目标,划定问题空间, ...

  4. DDD领域驱动设计深度解析

    目录 DDD领域驱动设计深度解析 DDD凝聚了软件工程的智慧 DDD领域驱动设计的历史 什么是领域 Domain 领域驱动设计 领域驱动设计几大原则详解 领域驱动模型的概念 领域驱动设计的挑战 DDD ...

  5. DDD领域驱动设计 — 贫血模型与充血模型

    文章转载来源:https://juejin.cn/post/6917125801460629518 | 前言  要想深入掌握和了解 DDD 领域驱动设计的核心,那无论如何也绕不开两大较为抽象的概念-- ...

  6. DDD 领域驱动设计:贫血模型、充血模型的深入解读!

    作者:JavaEdge在掘金 链接:https://juejin.cn/post/6917125801460629518 -     前言     - 要想深入掌握和了解 DDD 领域驱动设计的核心, ...

  7. DDD 领域驱动设计:贫血模型、充血模型的深入解读

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 后台回复"k8s",可领取k8s资料 -     前言 ...

  8. java充血模型orm框架,关于领域驱动设计和贫血、失血、充血模型

    大部分应用Spring框架的Java Web应用都相当关注单一职责原则和关注分离原则,但是在此之上却诞生了一些不太好的反模式和设计原则,比如: 领域模型对象只是用来存储应用的数据.(领域模型使用了贫血 ...

  9. DDD(领域驱动设计)系列主题:失血模型,贫血模型,充血模型和胀血模型详细解读和代码案例说明!

    目录 失血模型,贫血模型,充血模型和胀血模型定义及优点和缺点 失血模型 贫血模型 充血模型 胀血模型 失血模型,贫血模型,充血和胀血代码样例 失血模型代码样例 贫血模型代码样例 充血模型代码样例 DD ...

最新文章

  1. [问题]DotNet 项目如何实现在构建时 Build 号自动增加?
  2. Android locksettings/gatekeeper代码导读
  3. k8s 多租户_k8s使用rbac实现多租户
  4. 安装Linux显示内部错误,Ubuntu14.04安装XRDP远程连接及显示内部错误解决方案
  5. java inputtools_Java后台开发常用工具类
  6. 基于JAVA springboot+mybatis 电商书城平台系统设计和实现
  7. 学前端可以做哪些功能?
  8. 为什么我会放弃 Webpack 而选择 Vite
  9. java 面试 —— java 基础
  10. Python的动态特性(类实例增加属性,动态变量类型)
  11. 思凡软件(思凡全功能拓扑检查工具)
  12. 安全测试工具APPScan下载安装及简单使用
  13. 实时可视化大数据项目05 -- UI界面
  14. 【愚人节专场】Java实现定时发送小情话
  15. Google Play支付 接入配置
  16. linux gif 编辑软件,Ubuntu 16.10 安装byzanz截取动态效果图工具
  17. CISP-PTE是什么证书,CISP-PTE证书有什么用?
  18. 数据库DevOps:我们如何提供安全、稳定、高效的研发全自助数据库服务-iDB/DMS企业版...
  19. 编码学习——UTF-8与Unicode互转具体流程
  20. java:数学运算的取最大、最小、绝对值的函数方法

热门文章

  1. PHP HashTable总结
  2. 用户 'XXX\SERVERNAME$' 登录失败。 原因: 找不到与提供的名称匹配的登录名。 [客户端: ]...
  3. mybatis入门-第一个程序
  4. Excel教程(12) - 数学和三角函数
  5. 关于datagrid中控件利用js调用后台方法事件的问题
  6. 搞明白这八个问题,Linux系统就好学多了
  7. Android应用中网络请求库Volley的使用
  8. EventHandler, EventArgs
  9. 用页传值方式解决模态窗口的Response.WriteFile文件下载
  10. 动态二维数组赋值及for循环遍历和toString遍历