当前位置: 首页 > news >正文

【DDD】贫血模型和充血模型

基于业务开发的项目大多是MVC架构的。成为Web项目的标准开发模式,但它却是违反面向对象编程风格的,是面向过程的。之后基于领域驱动设计开发模式被人提倡。

DDD(Domain-driven design)领域驱动设计是一种通过将实现连接到持续进化的模型来满足复杂需求的软件开发方法。领域模型是对业务模型的抽象,DDD是把业务模型翻译成系统架构设计的一种方式。

贫血模型和充血模型

贫血模式与充血模式初探 - 简书

将数据与操作分离,只包含数据,不包含业务逻辑的类,就叫作贫血模型(Anemic Domain Model)。它破坏了面向对象的封装特性,是一种典型的面向过程的编程风格。

在贫血模型中,数据和业务逻辑被分割到不同的类中。充血模型(Rich Domain Model)正好相反,数据和对应的业务逻辑被封装到同一个类中。因此,这种充血模型满足面向对象的封装特性,是典型的面向对象编程风格。

区别

充血模型(DDD开发方式下)

贫血模型(传统OOP开发方式下)

编码方式

以领域对象为主的行为状态转换

事务脚本(CRUD、判断、循环、检查等逻辑只是简单的方法级别拆分)

Service

跨领域逻辑的组合

事务脚本的对外包装

Domain

一个领域的entity集合包

VO/DTO

Entity

包含了一个领域里的状态、以及对状态的直接操作单元,具有自闭环的对象。

VO/DTO

ValueObject

简单的基本值对象,如电话号码、地址等,组成entity的基本单元

语言基本类型

Aggregation

(有点类似数学中集合的定义)将实体和值对象划分为聚合并围绕着聚合定义边界。

多个VO/DTO

Aggregation Root

唯一可以给外界作为某个Aggregation引用的entity。

单个VO/DTO

http://www.lryc.cn/news/204090.html

相关文章:

  • 【JS学习】字符串的substring方法
  • vue部署,chunk文件有部分404,解决方案
  • 《红蓝攻防对抗实战》六.常规反弹之利用NC在windows系统执行反弹shell
  • python如何创建自己的对冲交易算法
  • Ubuntu22.04安装,SSH无法连接
  • 解决dirsearch扫描工具pkg_resources模块警告问题
  • JAVA-编程基础-11-04-java IO 字符流
  • 亚马逊云代码AI助手CodeWhisperer使用教程
  • 2023全新小程序广告流量主奖励发放系统源码 流量变现系统
  • 最详细STM32,cubeMX外部中断
  • 云栖大会?全部免费!!抢先一步看!
  • Linux常用的调试工具
  • PX4-Autopilot下载与编译
  • 关于数据可视化那些事
  • 【Java小知识点】类加载器的区别
  • 分布式微服务技术栈-SpringCloud<Eureka,Ribbon,nacos>
  • Unity解决:导出AndroidStudio工程 出现如下报错的解决方法
  • Mac电脑怎么在Dock窗口预览,Dock窗口预览工具DockView功能介绍
  • Hadoop3教程(三十):(生产调优篇)纠删码
  • 用nodejs爬虫台湾痞客邦相册
  • 物联网_01_物理设备的网络接入
  • AD9371 官方例程之 tx_jesd 与 xcvr接口映射
  • UserWarning: CUDA initialization: CUDA unknown error
  • C算法:使用选择排序实现从(大到小/从小到大)排序数组,且元素交换不可使用第三变量。
  • 用mysql客户端操作时,一直提示 Lost connection to MySQL server during query
  • KubeSphere一键安装部署K8S集群(单master节点)-亲测过
  • vue3 element-plus 组件table表格 勾选框回显(初始化默认回显)完整静态代码
  • Redis --- 安装教程
  • 代码阅读:LanGCN
  • 基于Java的校园餐厅订餐管理系统设计与实现(源码+lw+部署文档+讲解等)