贫血模型和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. DQL_MySQL

    4.DQL(查询数据){SUPER 重点} 4.1DQL (Data Query Language : 数据查询语言) -所有的查询操作: Select 数据库中最核心的语言  create data ...

  2. BUUCTF-web ikun(Python 反序列化)

    正如本题所说,脑洞有点大.考点还很多,不过最核心的还是python的pickle反序列化漏洞 题目中暗示了要6级号,找了很多页都没看到,于是写了脚本 在第180页有6级号,但是价格出奇的高,明显买不起 ...

  3. SpringCloud Bus消息总线简介

    简介: SpringCloud Bus配合SpringCloud Config使用可以实现配置的动态刷新 SpringCloud Bus是用来将分布式系统的节点与轻量级消息系统链接起来的框架,它整合了 ...

  4. 第六章 文件&IO流

    6.1.File类 描述:该类是文件和目录路径名的抽象表示 构造方法: 方法 描述 public File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的File ...

  5. 12-21 Request庫

  6. Python Tuple(元组) len()方法

    描述 Python 元组 len() 函数计算元组元素个数.高佣联盟 www.cgewang.com 语法 len()方法语法: len(tuple) 参数 tuple -- 要计算的元组. 返回值 ...

  7. PHP round() 函数

    实例 对浮点数进行四舍五入:高佣联盟 www.cgewang.com <?php echo(round(0.60) . "<br>"); echo(round(0 ...

  8. MYSQL-MGR架构配置

    MGR安装:机器列表:pc-s4 s4 --2pc-s3 s3 --1pc-s1 s1 --1pc-s2 s2 --1 1,为初始化搭建,2,为后续添加 对1 三个数据库先进行初始化========= ...

  9. 利用python进行数据分析PDF高清完整版免费下载|百度云盘|Python基础教程免费电子书

    点击获取提取码:hi2j 内容简介 [名人推荐] "科学计算和数据分析社区已经等待这本书很多年了:大量具体的实践建议,以及大量综合应用方法.本书在未来几年里肯定会成为Python领域中技术计 ...

  10. OJ评测状态

    Pending/Waiting 排队等待中 Pending Rejudge 答案重判中 Compiling 正在编译 Running/Judging 运行判断中 Accepted(AC) 程序通过 C ...