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

  • 领域

    --例如电子商务系统

  • 子领域

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

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

  • 界限上下文

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

贫血模型和DDD模型的更多相关文章

  1. 复杂领域的Cynefin模型和Stacey模型

    最近好奇“复杂系统”,收集了点资料,本文关于Cynefin模型和Stacey模型.图文转自互联网后稍做修改. Cynefin模型提供一个从因果关系复杂情度来分析当前情况而作决定的框架,提出有五个领域: ...

  2. 文本信息检索——布尔模型和TF-IDF模型

    文本信息检索--布尔模型和TF-IDF模型 1. 布尔模型 ​ 如要检索"布尔检索"或"概率检索"但不包括"向量检索"方面的文档,其相应的查 ...

  3. 并发编程:Actors 模型和 CSP 模型

    https://mp.weixin.qq.com/s/emB99CtEVXS4p6tRjJ2xww 并发编程:Actors 模型和 CSP 模型 ImportNew 2017-04-27    

  4. 三分钟掌控Actor模型和CSP模型

    回顾一下前文<三分钟掌握共享内存模型和 Actor模型> Actor vs CSP模型 传统多线程的的共享内存(ShareMemory)模型使用lock,condition等同步原语来强行 ...

  5. Inception模型和Residual模型卷积操作的keras实现

    Inception模型和Residual残差模型是卷积神经网络中对卷积升级的两个操作. 一.  Inception模型(by google) 这个模型的trick是将大卷积核变成小卷积核,将多个卷积核 ...

  6. Actor模型和CSP模型的区别

    引用至:http://www.jdon.com/concurrent/actor-csp.html Akka/Erlang的actor模型与Go语言的协程Goroutine与通道Channel代表的C ...

  7. NLP中word2vec的CBOW模型和Skip-Gram模型

    参考:tensorflow_manual_cn.pdf     Page83 例子(数据集): the quick brown fox jumped over the lazy dog. (1)CBO ...

  8. 比较一下Linux下的Epoll模型和select模型的区别

    一. select 模型(apache的常用) 1. 最大并发数限制,因为一个进程所打开的 FD (文件描述符)是有限制的,由 FD_SETSIZE 设置,默认值是 1024/2048 ,因此 Sel ...

  9. 利用生产者消费者模型和MQ模型写一个自己的日志系统-并发设计里一定会用到的手段

    一:前言 写这个程序主要是用来理解生产者消费者模型,以及通过这个Demo来理解Redis的单线程取原子任务是怎么实现的和巩固一下并发相关的知识:这个虽然是个Demo,但是只要稍加改下Appender部 ...

随机推荐

  1. 如何从Python负零基础到精通数据分析

    一.为什么学习数据分析 1.运营的尴尬:运营人需要一个硬技能每个初入行的新人都会察觉到,运营是一个似乎并没有自己的核心竞争力和安全感的工作.因为每天的工作好像都被各种琐事所围绕,而只有一个主题是永恒不 ...

  2. JFinal笔记

    目录 JFinalConfig 1. configConstant() 2. configRoute() 3. configEngine 4. configPlugin 5. configInterc ...

  3. 前端需要知道的 HTML5 SEO优化

    title标签,字数不能过长(不超过70个字符最优) <title>淘宝网 - 淘!我喜欢</title> 使用description以及keyword标签(不超过300个字符 ...

  4. 03_Linux定制篇

    第十四章 JAVAEE定制篇 搭建JAVAEE环境 14.1 安装JDK 1)先将软件通过xftp5上传到/opt下 2)解压缩到/opt 3)配置环境变量的配置文件vim/etc/profile J ...

  5. Skill 脚本演示 ycBusNet.il

    https://www.cnblogs.com/yeungchie/ ycBusNet.il 用于原理图中按照一定格式,批量创建 Bus . 回到目录

  6. luogu P2354 [NOI2014]随机数生成器 贪心 卡空间 暴力

    LINK:随机数生成器 观察数据范围还是可以把矩阵给生成出来的. 考虑如何求出答案.题目要求把选出的数字从小到大排序后字典序尽可能的小 实际上这个类似于Mex的问题. 所以要从大到小选数字 考虑选择一 ...

  7. 用大白话解释什么是Socket

    好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star,更多文章请前往:目录导航 前言 我在去年就学习过Java中 ...

  8. sql developer连接mysql数据库

    1 首先打开sql developer ,选择上方菜单,工具(tools)--->首选项,如下图 2  数据库(database)--->第三方 JDBC驱动程序 ; “添加条目”,选择m ...

  9. 老板让我从上千个Excel中筛选数据,利用Python分分钟解决!

    大家好,又到了Python办公自动化系列. 今天分享一个真实的办公自动化需求,大家一定要仔细阅读需求说明,在理解需求之后即可体会Python的强大! 很多人学习python,不知道从何学起.很多人学习 ...

  10. 六种酷炫Python运行进度条

    本文介绍了目前6种比较常用的进度条,让大家都能直观地看到脚本运行最新的进展情况 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做 ...