贫血模型和DDD模型
1.贫血模型
1.1 概念
常见的mvc三层架构
-
简单、没有行为
2.领域驱动设计
-
Domain Driven Design
-
简称 DDD
-
DDD是一种以领域为核心的设计和开发理念。DDD通过维护一个深度反应领域概念的模型,以及提供了可行的经过实践校验的大量模式来应对领域的复杂性
2.2 领域模型的特点
-
对业务领域做了建模
-- 细粒度的类,易于扩展,容易复用
-- 可以应对复杂的业务逻辑
-- 需要经验掌握
-
简单的领域模型
-- 几乎和数据库中的表一一对应
-
复杂领域模型
-- 使用了继承、组合、设计模式等各种手段
2.3 什么是领域
-
收入确认
-
机票预订
-
金融
。。。
2.4 通用语言
UML图、建模
2.5 DDD分层架构
-
用户界面/展现层
-
应用层
-
领域层
-
基础设施层
领域层就是把应用层的逻辑放到它这里
2.6 在领域层有什么东西
2.6.1实体
-
唯一标志
--对象不是由属性定义的,而是标志定义的
-- 对象内容的变化不会影响标识符
-- 无论保存到硬盘 ,装入内存,通过网络发送,标识符都不变
-
除了标志外,哪些东西应该成为实体的属性?
-- 抓住实体对象定义的最基本特征,用于识别,查找或匹配对象的特征
-- 只添加那些对概念至关重要的行为和这些行为所需的属性
2.6.2 值对象(value Object)
-- 对象是根据值来确定的
-- 可以在不同的实体中使用
-- 值对象通常是不可变的
-- Color, Point ,Money...
2.6.3 领域服务
-
有些领域逻辑是动词
-- 表示了一种重要的行为很难映射为对象,无法归纳到实体和 值对象当中
-- 例如:转账
-
特征
-- 服务执行的操作涉及一个领域概念,这个领域概念通常不属于一个实体或者值对象
-- 被执行的操作涉及到领域中的其他的对象
-- 操作是无状态的
-
聚合(高内聚,低耦合就是这个意思)
一堆对象组合有边界的服务
2.6.4 当构造一个复杂的对象时...
-
怎么解决这些问题?
-- 聚合的对象比较多
-- 构造函数参数很多
-- 逻辑很复杂
2.7 模型的分裂(针对大型复杂系统)
-
领域
--例如电子商务系统
-
子领域
-- 一个领域在逻辑思维分离的部分
-- 例如订单、产品目录、库存、发票
-
界限上下文
-- 领域模型所生产的边界