贫血模型和DDD模型
贫血模型和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模型的更多相关文章
- 复杂领域的Cynefin模型和Stacey模型
最近好奇“复杂系统”,收集了点资料,本文关于Cynefin模型和Stacey模型.图文转自互联网后稍做修改. Cynefin模型提供一个从因果关系复杂情度来分析当前情况而作决定的框架,提出有五个领域: ...
- 文本信息检索——布尔模型和TF-IDF模型
文本信息检索--布尔模型和TF-IDF模型 1. 布尔模型 如要检索"布尔检索"或"概率检索"但不包括"向量检索"方面的文档,其相应的查 ...
- 并发编程:Actors 模型和 CSP 模型
https://mp.weixin.qq.com/s/emB99CtEVXS4p6tRjJ2xww 并发编程:Actors 模型和 CSP 模型 ImportNew 2017-04-27
- 三分钟掌控Actor模型和CSP模型
回顾一下前文<三分钟掌握共享内存模型和 Actor模型> Actor vs CSP模型 传统多线程的的共享内存(ShareMemory)模型使用lock,condition等同步原语来强行 ...
- Inception模型和Residual模型卷积操作的keras实现
Inception模型和Residual残差模型是卷积神经网络中对卷积升级的两个操作. 一. Inception模型(by google) 这个模型的trick是将大卷积核变成小卷积核,将多个卷积核 ...
- Actor模型和CSP模型的区别
引用至:http://www.jdon.com/concurrent/actor-csp.html Akka/Erlang的actor模型与Go语言的协程Goroutine与通道Channel代表的C ...
- NLP中word2vec的CBOW模型和Skip-Gram模型
参考:tensorflow_manual_cn.pdf Page83 例子(数据集): the quick brown fox jumped over the lazy dog. (1)CBO ...
- 比较一下Linux下的Epoll模型和select模型的区别
一. select 模型(apache的常用) 1. 最大并发数限制,因为一个进程所打开的 FD (文件描述符)是有限制的,由 FD_SETSIZE 设置,默认值是 1024/2048 ,因此 Sel ...
- 利用生产者消费者模型和MQ模型写一个自己的日志系统-并发设计里一定会用到的手段
一:前言 写这个程序主要是用来理解生产者消费者模型,以及通过这个Demo来理解Redis的单线程取原子任务是怎么实现的和巩固一下并发相关的知识:这个虽然是个Demo,但是只要稍加改下Appender部 ...
随机推荐
- 面试题十八:在O(1)的时间内删除链表的节点
方法一:将要删除的·节点的下一个节点的内容复制到该节点上,然后删除下一个节点注意特殊情况:链表只有一个节点时,则删除头节点,则把头节点设置为null, 如果删除的尾节点则需要顺序遍历链表,取得前序节点 ...
- Redis的事件机制
目录 一.Redis的运行过程 二.事件数据结构 2.1 文件事件数据结构 2.2 事件事件数据结构 3.3 事件循环 三.事件的注册过程 3.1 文件事件的注册过程 3.2 时间事件的注册过程 四. ...
- SpringCloud Bus 动态刷新全局广播和定点通知
全局广播 前提: 先具备良好的 RabbitMQ 环境 1. 演示广播效果,增加复杂度,再以3355为模板再制做一个3366模块 <!--pom.xml--> <?xml versi ...
- Java Web(5)-Servlet详解(下)
一.HttpServletRequest 类 1. HttpServletRequest 类作用? 每次只要有请求进入 Tomcat 服务器,Tomcat 服务器就会把请求过来的 HTTP 协议信息解 ...
- PHP current() 函数
实例 输出数组中的当前元素的值: <?php$people = array("Peter", "Joe", "Glenn", &quo ...
- P4274 [NOI2004]小H的小屋 dp 贪心
LINK:小H的小屋 尽管有论文 但是 其证明非常的不严谨 结尾甚至还是大胆猜测等字样... 先说贪心:容易发现m|n的时候此时均分两个地方就是最优的. 关于这个证明显然m在均分的时候的分点一定是n的 ...
- bzoj 1738 [Usaco2005 mar]Ombrophobic Bovines 发抖的牛 最大流+二分
题目要求所有牛都去避雨的最长时间最小. 显然需要二分 二分之后考虑如何判定. 显然每头牛都可以去某个地方 但是前提是最短路径<=mid. 依靠二分出来的东西建图.可以发现这是一个匹配问题 din ...
- [C#] (原创)一步一步教你自定义控件——01,TrackBar
一.前言 技术没有先进落后之分,只有合不合适. WinForm有着非常多的优点,在使用WinForm久了之后,难免会觉得WinForm自带的某些控件外观上有些许朴素.或者功能上有些不如意,自然而然便想 ...
- SpringBoot之多模块项目
SpringBoot之多模块项目 说明:我们通过maven的父子工程来搭建springboot的多模块项目** 项目的整体结构 本项目涉及了到了五个模块 framework-web模块主要是放置前端的 ...
- Spring学习总结(6)-@Component和@ComponentScan注解
参考文档:https://docs.spring.io/spring/docs/5.2.0.RELEASE/spring-framework-reference/core.html#beans-ste ...