文档章节

学习DDD总结

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

实体

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

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

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

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

值对象

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

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

领域服务

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

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

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

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

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

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

领域事件

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

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

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

© 著作权归作者所有

共有 人打赏支持
上一篇: Android收集
kut

kut

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

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

喵王不瞌睡
2014/10/23
0
0
[.NET领域驱动设计实战系列]专题十一:.NET 领域驱动设计实战系列总结

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

杰克.陈
2017/12/05
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
DDD理论学习系列——案例及目录

目录 DDD理论学习系列(1)-- 通用语言 DDD理论学习系列(2)-- 领域 DDD理论学习系列(3)-- 限界上下文 DDD理论学习系列(4)-- 领域模型 DDD理论学习系列(5)-- 统一建模语言 DDD理论学习...

圣杰
2017/05/16
0
0
DDD理论学习系列(2)-- 领域

DDD理论学习系列——案例及目录 1. 引言 领域一词,主要有以下两个意思: 一国主权所达之地。 学术思想或社会活动的范围。 不管是指国家的主权范围也好还是学术活动范围,都是在讲一个范围,...

圣杰
2017/05/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS配置Tomcat监听80端口,虚拟主机

Tomcat更改默认端口为80 更改的配置文件是: /usr/local/tomcat/conf/server.xml [root@test-a ~]# vim /usr/local/tomcat/conf/server.xml # 找到 Connector port="8080" protocol="HTTP/1......

野雪球
今天
5
0
《稻盛和夫经营学》读后感心得体会3180字范文

《稻盛和夫经营学》读后感心得体会3180字范文: 一代日本经营之圣稻盛和夫凭借刻苦勤奋的精神以及深植于佛教的商业道德准则,成为了“佛系”企业家的代表人物。在《稻盛和夫经营学》“领导人...

原创小博客
今天
3
0
java框架学习日志-5(常见的依赖注入)

依赖注入(dependency injection) 之前提到控制反转(Inversion of Control)也叫依赖注入,它们其实是一个东西,只是看的角度不同,这章详细说一下依赖注入。 依赖——指bean对象创建依赖于...

白话
今天
4
0
红外接收器驱动开发

背景:使用系统的红外遥控软件没有反应,然后以为自己接线错误,反复测试,结果烧坏了一个红外接收器,信号主板没有问题。所以自己开发了一个红外接收器的python驱动。接线参见https://my.os...

mbzhong
今天
2
0
ActiveMQ消息传送机制以及ACK机制详解

AcitveMQ是作为一种消息存储和分发组件,涉及到client与broker端数据交互的方方面面,它不仅要担保消息的存储安全性,还要提供额外的手段来确保消息的分发是可靠的。 一. ActiveMQ消息传送机...

watermelon11
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部