文档章节

学习DDD总结

kut
 kut
发布于 2015/04/28 12:27
字数 863
阅读 138
收藏 5

实体

实体是业务系统中分析得出的业务对象,诸如用户、产品之类的,它们需持久于数据层,有自己的属性。

但实体并不是数据展现层所需的数据载体,它只是一种业务载体。它定义的关于本实体的业务方法,并将这些业务方法所对本实体的改变持久化到数据层。

实体不提供直接修改其内部业务属性的方法,也就是说,不再有setter方法。改变内部业务属性只能是有能表达业务、并能通用语言表达的方法来处理。

实体不提供直接读取其内部业务属性的方法,它是通过值对象对外发布其业务属性(或限制访问)。

值对象

是一种承载数据的不可变的对象。

一般可以这么理解,它只是用来传输数据的,它与具体的业务模型无关。一般情况下它是实体的数据展现形式,因为实体只是业务载体,并不存在展示数据的能力,所以实体要想给展示层显示数据,那么就要转换成一个值对象,让展示层渲染值对象即可,同样,这也解决了如何不使用osiv的问题。

领域服务

有一些业务操作在不好归结为实体方法的时候,那么它就极有可能是领域服务。

又或者有一大流程的、大量业务规则的、并且不好归结为实体方法的时候,那么它一定是领域服务。

领域服务有以下几个特征:

  1. 调用多个实体协同完成一个复杂的逻辑业务流程。
  2. 实体转换值对象。
  3. 返回值为值对象。

过份强调领域服务会导致贫血模型,那么什么时候才是使用实体方法,什么时候才是使领域服务呢?

  1. 因为实体业务属性是不能被外界直接访问的,所以,当你要访问这些业务属性才能完成业务功能的时候,那么就要实现成实体方法,而不是领域服务。
  2. 当一个业务操作是由多个不同的实体协作,并且业务流相当复杂的时候,比方说吧,如果非得由实体方法实现,但是调用方需要调用多个实体方法才能完成这个业务操作的话,那么这个业务操作需要实现成领域服务的一个业务方法。
  3. 如果混有以上两点的,那么肯定是要实现成领域服务,只是实体方法的工作范围会缩窄。

领域事件

经典的观察者模式,但是在这里却是相当有用的。主要体现在以下几个方面:

  1. 更加关注业务本身,而由业务本身所影响产生的附加业务则可以实现为更为专注的业务单元。
  2. 业务与附属操作解偶,系统更易于扩展。
  3. 更容易与其它子系统集成。

领域事件给开发大型的、复杂的系统提供了细化业务的可能。

© 著作权归作者所有

共有 人打赏支持
kut

kut

粉丝 52
博文 109
码字总数 32583
作品 0
广州
技术主管
CSS 右侧固定宽度 左侧自适应 或者 三列布局 左右固定 中间自适应的问题

一: 右侧固定宽度 左侧自适应   第一种方法:左侧用margin-right,右侧float:right 就可以实现。   CSS代码可以如下写: 如上代码就可以实现效果。 第2种方法:左侧同样用margin-right ...

喵王不瞌睡
2014/10/23
0
0
shell脚本学习总结----cut+sort+uniq+tr+find+dd+file

shell脚本学习总结----cut+sort+uniq+tr+find+dd+file =========================================================================== cut =============================================......

doublelinux
2017/10/20
0
0
[.NET领域驱动设计实战系列]专题十一:.NET 领域驱动设计实战系列总结

原文:[.NET领域驱动设计实战系列]专题十一:.NET 领域驱动设计实战系列总结 一、引用   其实在去年本人已经看过很多关于领域驱动设计的书籍了,包括Microsoft .NET企业级应用框架设计、领域...

杰克.陈
2017/12/05
0
0
大叔推荐博客索引

以下是我的所有推荐文章,其中多半是文章系列,并且这个索引会在以后过程中进行追加,所以,各位看到的,永远都不是最新的,呵呵! 大叔推荐文章系列 DotNetCore跨平台~文章索引~永久更新(...

mcy247
2017/12/05
0
0
Lind.DDD.Repositories.Redis层介绍

之前已经发生了 大叔之前介绍过关于redis的文章,有缓存,队列,分布式pub/sub,数据集缓存以及仓储redis的实现等等,而今天在Lind.DDD的持久化组件里,redis当然也有一席之地,作为当今最红...

mcy247
2017/12/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

windbg调试C源码级驱动

联机方式不多说了。我博客里有,英文的。 windbg联机文档 https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/debug-universal-drivers---step-by-step-lab--echo-kernel......

simpower
33分钟前
0
0
redis快照和AOF简介

数据持久化到硬盘:一是快照(snapshotting),二是只追加文件(append-only file AOF) 快照 核心原理:redis某个时间内存内的所有数据写入硬盘 场景:redis快照内存里面的数据 1. 用户发送bgsav...

拐美人
34分钟前
0
0
这个七夕,送你一份程序员教科书级别的告白指南

给广大爱码士们的高能预警: 今天,就是七夕了…… (单身非作战人群请速速退场!) 时常有技术GG向个推君抱怨 经过网民多年的教育 以及技术人持之以恒的自黑 冲锋衣狂热分子·格子衫骨灰级粉...

个推
39分钟前
0
0
python爬虫日志(15)cookie详解

转载:原文地址 早期Web开发面临的最大问题之一是如何管理状态。服务器端没有办法知道两个请求是否来自于同一个浏览器。那时的办法是在请求的页面中插入一个token,并且在下一次请求中将这个...

茫羽行
39分钟前
0
0
qlv视频格式转换器

  腾讯视频中的视频影视资源有很多,小编经常在里面下载视频观看,应该也有很多朋友和小编一样吧,最近热播的电视剧也不少,如《香蜜沉沉烬如霜》、《夜天子》还有已经完结的《扶摇》,这么...

萤火的萤火
43分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部