摘抄来自论坛的一些DDD讨论

先说说之前几次DDD项目失败的案例,其实也不能算是失败,只是没有领会DDD的思想。

之前的DDD是建立在数据层之上的,首先是每张数据表对应一个数据实体,每个数据实体由泛型的DAO管理,DAO又被数据上下文继承以实现事务,这就构成了数据层,业务代码是写在DataContext中。

数据层:DataEntity <- DataMapper<DataEntity> <- DataContext

在这样的数据层之上构建了“貌似”DDD的领域层,首先由领域对象继承数据上下文以实现序列化和脏读校验等功能,聚合根又继承领域对象以实现级联更新、延迟加载和管理领域对象之间的关联,最后由实现了LINQ查询的仓储对象管理聚合根,这就是当时的领域层。

领域层:DataContext <- Entity <-RootEntity <- Repository

这套架构陆陆续续用了1年左右,在运用的过程中发现DDD除了增加项目的复杂程度之外,没有带来任何好处,这是为什么呢?

直到前段时间我才发现,构建在数据层之上的领域层完全就是一个错误,领域层应当处于整个项目中的最底层,而且完全不用继承IEntity,IRepository之类的接口,正是这些接口绑架了领域模型。

==================分割线==================

经过重新设计的领域层今天终于完工了,处于最底层的仍旧是数据实体,原来的泛型DAO和DataContext全部都移动到了横切层,以类似于切面的方式向领域层提供服务。

数据实体之上是值对象,值对象是完全按照领域需求构建的。数据实体和值对象之间还有一层薄薄的数据转换服务,用于将面向数据库的数据实体转换为面向领域的值对象。
                    
数据层:DataEntity <-> Data Transformation Services <-> ValueObject

数据层之上是领域层,一个领域对象内持有若干个值对象,领域对象负载维护自生的状态,和领域对象处于同一层次的是领域服务,领域服务更倾向与处理业务逻辑,在两者之上有仓储对象,仅负责查询。

领域层:Entity / Service <- Repository

构建在数据层和领域层之外的是横切层,横切层提供轻量级的数据服务,例如事务管理、对象缓存,单例模式的DataMapper。这些服务都是以using的方式提供,即:只能在小范围的函数块内使用,使用过后自动销毁。

横切层:EventManager / CacheManager / DataManager 等。

==================分割线==================

现在的领域层已经处于整个项目的最底层了,ValueObject完全是按照领域的对象的需求构建的,使用起来得心应手。

今天在一个大项目中实践后发现,完全可以不参考UI设计,不参考原型设计,只按照需求说明书设计领域结构,设计完成之后的领域模型居然很神奇的符合UI和原型的需求。

这样的开发流程似乎也很符合TDD的理念,接口先行、之后是测试、再后来是功能、最后才是UI。

原来的数据层现在分散到了3个部分:
1、删除重量级的ORM功能,例如级联更新,延迟加载、连表查询等
2、基本的单表持久化移动到横切层,注意最下面一条虚线,现在数据持久化是通过数据实体发消息给数据存储实现的。
3、缓存管理、事务管理移动到横切层,现在直接缓存领域对象,而不是缓存数据实体

也就是说,现在已经没有传统意义上的数据层了,数据存储都是通过消息机制将更改DataEntity的操作传递到持久化服务,持久化服务只有非常简单的CUD功能,可以连接到Sql,NoSql甚至XML文件。

这正是这张图想表达的内容,仓储层并不需要和数据库进行交互。

我们习惯性的思维,仓储需要接受一个请求,然后查询数据库获得数据实体,再将数据实体转换为领域对象。人总是有惰性的,有时候为了省事,数据实体就直接参与业务逻辑、甚至是返回给UI了。

在这张图上,领域层、应用层、UI层都是访问不到数据实体的,对领域对象进行的任意操作都会经由数据转换服务(防腐层)转换为若干条DataEntity.Change消息,数据存储(持久化服务)复杂侦听这些消息,并连接数据库。

也就是说领域层只需要修改数据,而不需要关心持久化的问题。

http://www.jdon.com/44900

时间: 2024-11-10 01:22:33

摘抄来自论坛的一些DDD讨论的相关文章

拨乱反正:DDD 回归具体的业务场景,Domain Model 再再重新设计

首先,把最真挚的情感送与梅西,加油! 写在前面 阅读目录: 重申业务场景 Domain Model 设计 后记 上一篇<设计窘境:来自 Repository 的一丝线索,Domain Model 再重新设计>. 讲本篇内容之前,先回顾上一篇所讨论的内容,主要是 Repository(仓储)的职责问题,属于领域?还是应用层?其实到头来也没有准确的结论,但是最终比较偏向于仓储定义在领域,实现在基础层,调用在应用层.你可能有些疑问,为什么要讨论仓储的职责问题?看过上一篇的内容你可能会有些答案,这也就

当不再炒作大数据的时候,大数据时代就真的来了

从2015年开始,大数据就已经被移出了Gartner的新兴技术炒作曲线."Big Data"(大数据)一词最早于2011年8月出现在Gartner新兴技术炒作曲线中,当时Gartner预计大数据技术需要2年到5年才能进入企业的实际生产型应用中.从那以后,大数据就迅速被市场热炒,最终在2015年彻底在Gartner新兴技术炒作曲线中消失. 进入2016年,大数据已经进入了实际的企业生产应用,在切实推动企业向数字化转型.另一家市场调查公司IDC则强调,在未来5年中,全球的数据驱动型企业将获

社区专家谈 12306

由于春运,铁道部官方订票网站12306流量暴增,其Alexa排名一度进入前200,网友戏称,12306已经成为“全球最大.最牛的电商网站”.由于流量激增,12306系统频频瘫痪,一度出现登不上去.登上去抢不了票.抢到票需排队.排队后出票失败等局面.系统的用户体验.性能遭到用户大量的不满. 我们邀请了几位系统架构方面的专家,请他们从技术的角度为你剖析12306(我们会陆续增加其他几位专家的回复).同时我们还从论坛活动(畅聊12306,赢精美礼品)中选取了一些精彩回复.如果您对这些问题有独到的见解,

查找企业网中非法接入的WIFI设备(原创)

一.企业网络安全管理面临的新问题 现在计算机和移动智能设备越来越普及,有一些企业网用户不再满足于只让实名登记的.有实际办公用途的计算机上网,他们把家中的笔记本.智能手机.平 板电脑带到单位,通过非法架设SOHO路由器.随身WIFI.安装免费WIFI软件等,绕过网络管理员的检测,实现非法接入企业网,然后就可以通过他们自 己的设备实现一些移动平台的网络应用.这些SOHO路由器.随身WIFI的一个大卖点:"就是可以绕过检测,隐匿接入",因为这些设备都可以关闭信号的广 播发送,通过信号检测的方

安全协议系列(五)---- IKE 与 IPSec(中)

在上一篇中,搭建好了实验环境.完整运行一次 IKE/IPSec 协议,收集相关的输出及抓包,就可以进行协议分析.分析过程中,我们将使用 IKE 进程的屏幕输出和 Wireshark 抓包,结合相关 RFC,利用 python 进行验证计算.先看协议的一次完整运行(过滤掉无关报文,如下图) 下面是 RFC 5996 中对 IKEv2 协议的规范说明 由上可知,IKEv2 协议由两个阶段的交互过程(即两个来回,共四个报文)组成.第一阶段称为 IKE_SA_INIT 交换.第二阶段称为 IKE_AUT

100+ 超全的web开发工具和资源

转载出处:https://xituqu.com/170.html 作为Web开发者,这是好的时代,也是坏的时代.Web开发技术也在不断变化.虽然很令人兴奋,但是这也意味着Web开发人员需要要积极主动的学习新技术和新的编程语言,并愿意和渴望接受新的挑战,以适应变化.新的挑战可能会包括一些开发上的要求,如利用适应现有的框架来满足业务需求.测试一个网站,能从中知道出了哪些技术上的问题,并且我们针对这些问题进行优化和消除.便于后端的开发进程加快和测试.所以我们列出了完整的web开发所需要的工具和资源,助

超全的web开发工具和资源

作为Web开发者,这是好的时代,也是坏的时代.Web开发技术也在不断变化.虽然很令人兴奋,但是这也意味着Web开发人员需要要积极主动的学习新技术和新的编程语言,并愿意和渴望接受新的挑战,以适应变化.新的挑战可能会包括一些开发上的要求,如利用适应现有的框架来满足业务需求.测试一个网站,能从中知道出了哪些技术上的问题,并且我们针对这些问题进行优化和消除.便于后端的开发进程加快和测试.所以我们列出了完整的web开发所需要的工具和资源,助力开发者提高开发效率!学不止步,让我们努力成为一个优秀的开发者!

如何进入“深网”

暗网(又称作深网,不可见网,隐藏网)是指互联网上的内容,不属于那些可以被标准搜索引擎索引的表面网络. 迈克尔·伯格曼将当今互联网上的搜索服务比喻为像在地球的海洋表面的拉起一个大网的搜索,巨量的表面信息固然可以通过这种方式被查找得到,可是还有相当大量的信息由于隐藏在深处而被搜索引擎错失掉.绝大部分这些隐藏的信息是须通过动态请求产生的网页信息,而标准的搜索引擎却无法对其进行查找.传统的搜索引擎"看"不到,也获取不了这些存在于暗网的内容,除非通过特定的搜查这些页面才会动态产生.于是相对的,暗

台湾P2P平台

2014年6月28日下午1:30,“2014两岸三地P2P网贷行业高峰论坛”在上海会展中心友谊会堂如期举行,现场高朋满座,来自全国各地的众多知名P2P网站平台的负责人参与了讨论,并就当前P2P行业的一些热点问题发表了自己的看法.其中,尤为引人关注的是来自香港和宝岛台湾的两家P2P平台.网贷之家记者特别有幸地采访到了来自台湾的乔美国际的创始人简永松先生.简老对当前的P2P行业发表了一系列的非常有见地的评论,引起了论坛现场的热烈讨论和多次掌声. 台湾唯一的P2P公司 据简老介绍,乔美国际成立于200