再谈领域建模和领域服务

标签: 随笔文章 | 发表时间:2013-09-01 07:50 | 作者:人月神话
出处:http://blog.sina.com.cn/cmmi
对于贫血的领域层,主要体现在两个方面,一个是没有领域业务对象的概念(领域模型中的聚合根),一个是没有明确的粗粒度的业务规则逻辑处理层。在这种情况下,原有的业务逻辑层变化为仅仅是DAL层的一个简单封装或通道,实际的业务处理全部转化到action层或dal层进行了处理,导致无法真正提炼一个业务模块真正应该具备的领域服务能力。

粗粒度的领域服务提供包括两个方面,一个是完整的领域业务对象提供的数据服务,一个是处理业务规则和逻辑用的业务服务。在领域驱动设计中,前者部分在仓储模型中完成,后者在service中完成。这里要注意DDD里面的service,和我们基于SOA分析和设计中的服务层仍然还是有差别,所有的共性的,应该提供给应用层访问的粗粒度的能力都应该抽象为服务层的服务。

在当前的领域分层架构中没有服务层的概念,在领域层和应用层都有服务,可以将服务层进一步抽取出来,服务层即向应用层提供所有的服务能力。这个服务能力不仅仅是原子服务能力,也包括了组合服务能力。对于服务层提供的服务能力,由服务层控制事务。对于进一步的服务编排,则在应用层进行完成,如果完全基于SOA参考架构,则在上面还会有BPM或BPEL层,重点是对原子服务进行组装和编排。

实体要考虑两个层面,一个是完全的data entity,一个含操作的entity,为了考虑在SOA架构中的数据和操作分离,建议还是采用完全的data entity实体,这个时候这种实体可以进一步作为跨层传输的DTO对象。而对于原有的DAO层,也不仅仅是实现数据的持久化,很多OR-Mapping操作也会在该层完成。数据层关注的是数据对象即和数据库一一映射的表,而领域层关注的是领域对象(可能涉及多张强聚合的表);数据层最终关心的是数据对象的持久化,而领域层关心的是业务对象全生命周期的管理。

在考虑了数据和操作分离后,对于聚合根的业务对象应该有一个专门的业务对象类,来处理所有和业务对象属性,状态变化相关的操作,即控制业务对象完整的数据和生命周期。而service类本身不应该对数据进行任何cud操作,service类的所有操作都应该转入到业务对象类中进行处理。在这种模式下service类目的仅仅是处理业务规则和逻辑,最终处理结果的落地仍然通过业务对象类来完成。

一个完整的业务系统的构建,不是简单的横向分层,还包括了纵向的分业务模块和业务组件。在领域驱动设计里面没有太多的对这两块结合的描述。在这里要注意两个方面的内容,一个是每一个业务组件都会向上层提供领域服务能力,第二每一个业务组件也会向其它业务组件提供领域服务能力。如果考虑业务系统开发的完全组件化架构和后续的分布式组件部署,那么就需要考虑对于向外部提供的领域服务,需要采用根据松耦合的服务方式向外部提供和发布(soap web service/rest 等),而对于内容提供的领域服务即可以仍然沿用常规api方式。对于同一个业务模块而言,如果要考虑到后续的领域服务层也可以单独的分层部署,那么所有的领域服务都需要通过松耦合的方式向外发布。

  青春就应该这样绽放   游戏测试:三国时期谁是你最好的兄弟!!   你不得不信的星座秘密

相关 [领域 建模 领域] 推荐:

再谈领域建模和领域服务

- - 人月神话的BLOG
对于贫血的领域层,主要体现在两个方面,一个是没有领域业务对象的概念(领域模型中的聚合根),一个是没有明确的粗粒度的业务规则逻辑处理层. 在这种情况下,原有的业务逻辑层变化为仅仅是DAL层的一个简单封装或通道,实际的业务处理全部转化到action层或dal层进行了处理,导致无法真正提炼一个业务模块真正应该具备的领域服务能力.

领域建模中的七种坏味道信息

- - 博客园_知识库
  英文原文: The Seven Information Smells of Domain Modelling.   领域建模(Domain modelling )作为一项强大的技术,常备于很多IT专业人士的工具箱之中. 令人遗憾的是,在过去的几年间,因为领域建模的几个问题导致人们对其大失所望,尤其是在敏捷领域.

谈领域服务

- - 人月神话的BLOG
对于跨系统和模块间的SOA服务识别和分析我前面文章谈的比较多,这块的SOA服务重点是实现跨系统和模块的业务交互和协同,而对于领域服务而言则更加关心的是对于单个系统或模块,其应该如何抽象领域对象并将其能力以粗粒度服务方式保留给应用层用. 在领域建模中的整体思路中,我们做两个层面的理解,其一是领域模型层重点是隔离传统的数据表并抽象为领域对象;而对于领域服务层重点是则将应用层和领域模型层解耦,模型层提供的能力是以领域服务的方式暴露到应用层使用的.

新领域的探索

- Fay - 人月神话的BLOG
在信息技术领域,任何新领域都是已有知识领域,已有技术和研究成果的进一步组合和创新,新领域一分解到底层你会发现全是已有技术,方法和工具. 这些很可能都是我们熟悉的内容,而新领域仅仅是对已有知识和技术的进一步组合,形成一套完整的方法和技术来解决新的问题. 当接触一个新领域的时候,首先是大量的阅读,在一开始没有机会实践的时候,那只有先补充和学习基础的理论,了解新领域的知识体系和结构,了解新领域所涉及到得关键技术.

Viddy:视频领域的Instagram?

- - Tech2IPO
Instagram刚被Facebook以 十亿美元的价格收购,成为照片分享领域的传奇. 与此同时,以视频领域的Instagram而著称的 Viddy在近日也冲上iPhone 免费应用榜首的位置. Business Insider甚至撰文建议 Google收购Viddy,从而在移动视频领域占据先机.

NVIDIA:ARM芯片将将进军PC领域

- Kevin - cnBeta.COM
据国外媒体报道,1993年,黄仁勋创立了英伟达,想要把3D图形技术从硅图超级电脑普及到PC电脑上. 该公司以每六个月推出一款新3D图形芯片的速度打败了无数竞争对手. 18年后的今天,英伟达仍然是硅谷最具创新力的企业之一. 它也是最后一个与微处理器供应商英特尔和AMD分庭抗礼的独立图形芯片制造商.

微内核领域的传说

- jinn - 技术奇异点
IT 业和自然科学领域常说的「传说」一词来源于英文 myth ,是个负面的形容词,更接近「流言」、「谣言」的意思. 如著名的电视节目《流言终结者》(mythblaster). 也经常被翻译成「神话」,如著名的《人月神话》(Man Month Myth). 这篇文章不是要贬低微内核 (micro-kernel) 这个概念本身,而是说人们对这个领域中的很多东西存在不小的误解.

OfficeDrop:办公领域的Dropbox (免费)

- 定风波 - iPad中文报
这是我们刚才上传的一些示例文件. Office Drop的文件夹管理功能. OfficeDrop这个名字很容易让人联想到著名的云端服务Dropbox,不过既然加上了Office这个名字,他当然是专门针对办公人群推出的服务了. 他的功能就是让用户随时随地的获取工作文件,他共支持25种文件格式. OfficeDrop 2.0版客户端本于本周上线,他从一款iPhone版本升级为了通用版应用程序,充分利用了iPad 2的摄像头将纸质文档“扫描”为电子文档.

谈领域驱动的设计

- - 人月神话的BLOG
最近一直在学习领域驱动设计,发现领域驱动设计的核心仍然是传统的面向对象分析设计的思路,但是却可以很好的和现有的组件化架构,分层架构,SOA服务等相关内容更好的融合. 对于传统的EA企业架构分析在分解到最底层的时候,很适合自然过渡到领域驱动设计的思路上来. 另外对于现有的基于NoSQL数据库的信息系统开发,领域驱动设计更是必须具备的系统分析和建模思路.