贫血模型和DDD模型

1.贫血模型

1.1 概念

常见的mvc三层架构

  • 简单、没有行为

2.领域驱动设计

2.1 概念(2004年提出的)

  • 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 模型的分裂(针对大型复杂系统)

  • 领域

    --例如电子商务系统

  • 子领域

    -- 一个领域在逻辑思维分离的部分

    -- 例如订单、产品目录、库存、发票

  • 界限上下文

    -- 领域模型所生产的边界

最新文章

  1. CozyRSS开发记录8-解析一份RSS
  2. hibernate开发(1)
  3. UVA 11817 Tunnelling the Earth --球面距离公式
  4. [Bundling and Minification ] 一、如何绑定
  5. JProfiler使用详细教程学习笔记
  6. Mobile phones_二维树状数组
  7. PostgreSQL的 initdb 源代码分析之十六
  8. hdu1166敌兵布阵
  9. [置顶] Bug 11775332 - cluvfy fails with PRVF-5636 with DNS response timeout error [ID 11775332.8]
  10. hdu 4893 Wow! Such Sequence!
  11. Flink升级到1.4版本遇到的坑
  12. 【C#第一天】数据相关
  13. 2489 小b和灯泡
  14. js的一些总结
  15. 2018-02-17 中文代码示例[译]Scala中创建隐式函数
  16. python-面向对象-01_面向对象(OOP)基本概念
  17. gdb 常用调试命令
  18. 【Go命令教程】4. go get
  19. Jmeter发送某个request时而成功,时而失败(处理办法:失败的时候尝试重新发送这个HTTP request)
  20. Python自动化之ajax返回表单验证的错误信息和序列化扩展

热门文章

  1. kylin streaming原理介绍与特点浅析
  2. Spring Cache缓存注解
  3. Python3.7安装pyaudio库报错问题及修复
  4. statsmodels 示例
  5. 11-14序列化模块之json、pickle、shelve
  6. Android Studio中如何使用自定义的framework库
  7. JavaWeb基础Day17 (JSP EL表达式 jstl标签库 beanutil工具类)
  8. day6. while双项循环及for循环
  9. 7月13日考试 题解(DFS序+期望+线段树优化建图)
  10. 【FZYZOJ】下片 题解(最短路+超级源点)