Why DDD?
1. 业务领域是一个应用程序的核心,使用DDD,直接面对核心业务,可增强业务需求确认速度,可以尽快暴露业务上的缺陷、风险。
2. 使用OO对核心业务进行建模,增强可扩展性、可维护性。domain model是核心业务,由POJO实现,不依赖于任何框架、数据库,不管想使用WEB方式或是Swing,或者移植到任何平台,domain model都不需要改变。
3. 解除了业务领域代码与非业务领域代码(如UI代码或持久层代码)的耦合,产生如下好处:
1)使代码修改、扩展更加轻松
2)使代码自动化测试更加容易
3)业务领域代码直接清晰的反映了业务需求
应用程序的分层
UI Layer --> Application Layer --> Domain Layer --> Infrastructure
UILayer就是用户接口,用户的直接操作界面,相当于Swing、Web页面;
Application Layer:应用层,服务器端的用于处理Application Logic的层次,也可以叫做Application Service,也可以说是一个domain model的facade。
Domain:包括几种类型的对象,后面有详细说明
Infrastructure:持久层或者其他网络应用层次
Domain model中的几个对象
1. Entity
具有唯一标识ID的对象,任何一个Entity对象在整个业务流程中都是唯一的,即便两个Entity对象的所有属性都相同,但具备不同的标识符,都是属于不同对象。
2. Value Object
不具备唯一标识的对象,通常被设计为Immutable;Entity和Value Object不能靠是不是被持久化来区分,value object也可能会被存储到数据库或文件系统中
3. Factory
用于创建domain对象,对于对象创建流程复杂的业务对象,需要使用Factory进行创建,以对客户端隐藏业务细节。
4. Repository
用于对domain对象进行添加、查找、删除等操作,一般都要与infrastructure进行交互,以接口方式定义。
5. Service
Service是一个domain object functionality operation的集合,没有状态,只提供Operation。通常会跨多个domain object,作为domain object间相互调用的一个接口。这样的operation如果定义在domain object中,会在domain object间形成一个强耦合,不利于修改、扩展。service中的方法可以认为是一个use case的操作序列,通常以接口方式定义。
与以前的三层结构的service比较 presentation + service + persistence
以前三层中的service包含业务逻辑,也包含与持久层的耦合,service层很厚,将很多业务逻辑全都写在里面,这样的service复用性及可维护性不高,只是针对一个客户端(这里指表现层)调用给出一个接口,是基于客户端请求的,而客户端这些请求有些时候仅仅是为了界面显示的需要,如在页面上要显示两个列表以便用户查看,像这种需求并不能体现真正的业务逻辑,而且这样的service根本不能被重用。在Martin Fowler的企业模型中定义的service layer 的概念,应该是很薄的一层,提供了用于客户端调用的facade,里面只包含应用层的逻辑(如上述的列表显示要求),而不是业务逻辑。
分享到:
相关推荐
Domain-Driven Design Distilled DDD(Domain-Driven Design 领域驱动设计)是由Eric Evans最先提出,目的是对软件所涉及到的领域进行建模,以应对系统规模过大时引起的软件复杂性的问题。整个过程大概是这样的,...
领域驱动设计(Domain-Driven Design,简称DDD)是一种软件开发的方法论,它由Eric Evans在其2004年的同名书籍《领域驱动设计:软件核心复杂性应对之道》中提出。DDD的核心思想是,软件系统的复杂性不仅仅是由技术...
关于DDD可参考InfoQ的Mini Book Domain Driven Design Quickly , 还有 Banq 的文章 实战DDD(Domain-Driven Design领域驱动设计), 和 领域模型驱动设计(DDD)之模型提炼 。 本书分为四部分,第一部分讲述了领域模型...
The software development community widely acknowledges that domain modeling is central to software design. Through domain modeling, software developers are able to express rich functionality and ...
.NET框架与C#语言结合应用领域驱动设计(Domain-driven Design, DDD)是现代软件开发中的一个重要实践。DDD旨在通过将复杂的业务逻辑集中在核心领域模型上,提高软件系统的可读性、可维护性和可扩展性。本章节我们将...
Implementing Domain-Driven Design 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国亚马逊官网搜索此书
Implementing Domain-Driven Design
《领域驱动设计精粹》(Domain-Driven Design Distilled)是Vaughn Vernon所著的一本关于领域驱动设计(Domain-Driven Design,简称DDD)的入门指南。DDD是一种软件开发的方法论,它强调在软件开发过程中,开发者...
Domain-Driven Design in PHP 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者...
### 域驱动设计(Domain-Driven Design, DDD):应对软件核心复杂性 #### 概述 《域驱动设计:应对软件核心复杂性》一书由埃里克·埃文斯(Eric Evans)撰写,Addison Wesley出版社于2003年8月20日出版。该书共560...
Domain-driven Design
Patterns, Principles and Practices of Domain-Driven Design 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载...
JavaScript Domain-Driven Design allows you to leverage your JavaScript skills to create advanced applications. You'll start with learning domain-driven concepts and working with UML diagrams. You'll ...
With Implementing Domain-Driven Design, Vaughn has made an important contribution not only to the literature of the Domain-Driven Design community, but also to the literature of the broader enterprise...
Domain-Driven Design - Tackling Complexity in the Heart of Software