`

DDD(Domain-Driven Design领域驱动设计)

阅读更多

      2004年著名建模专家Eric Evans发表了他最具影响力的著名书籍:Domain-Driven Design –Tackling Complexity in the Heart of Software(中文译名:领域驱动设计 2006年3月清华出版社译本,或称 Domain Driven-Design architecture [Evans DDD])。时值今日,DDD开发框架已经层出不穷(如RoR、RIFE、JdonFramework等),我们项目软件包结构都变成了这样:xxx.model;xxx.service,DDD思想可以说是遍地开花了.DDD是告诉我们如何做好业务层!并以领域驱动设计思想来选择和合适的框架.领域建模是一种艺术的技术,不是数学的技术,它是用来解决复杂软件快速应付变化的解决之道.

        软件的产生过程是:分析、设计、编程、测试、部署。过去,分析领域和软件设计是分裂的,分析人员从领域中收集基本概念;而设计必须指明一组能被项目中适应编程工具构造的组件,这些组件必须能够在目标环境中有效执行,并能够正确解决应用程序出现的问题。 模型驱动设计(Model-Driven Design)抛弃了分裂分析模型与设计的做法,使用单一的模型来满足这两方面的要求。这就是领域模型。单一的领域模型同时满足分析原型和软件设计,如果一个模型实现时不实用,重新寻找新模型。如果模型没有忠实表达领域关键概念时,也必须重新寻找新的模型。 建模和设计成为单个迭代循环。将领域模型和设计紧密联系。因此,建模专家必须懂设计,会编程。

        根据Eric的理论,业务层将细分为两个层次:应用层和领域层。应用层:定义软件可以完成的工作,并且指挥具有丰富含义的领域对象来解决问题,保持精练;不包括业务规则或知识,无业务情况的状态; 领域层:负责表示业务概念、业务状态的信息和业务规则,是业务软件核心。层次之间必须清晰分离,每个层都是内聚的,并且只依赖它的下层.

        Eric特别指出:那种将业务逻辑交由业务界面处理的快速UI方式是旁门左道。希望象C/S结构那样可视化拖拖图形就完成的软件开发是一种错误的方向,开发时快速,难于维护和扩展,虽然使用J2EE技术,其实是一种伪多层技术。建议购买"领域驱动设计"这本译书学习下.

        在领域对象的生命周期中,有三个模式来维护对象的完整性:聚合(Aggregate)定义清晰的所有权和边界使模型更加紧凑,避免出现盘根错节的对象关系网;工厂(Factory)和组合(Respository)。当一个对象生命周期之始,使用工厂和组合提供访问和控制模型对象的方法。建立聚合的模型,并把工厂和组合加入到设计中来,可以使我们系统地对模型对象进行管理。聚合圈出一个范围,在这个范围中,对象无论在哪个生命周期,保持不变性。

       MF(Martin Fowler)曾经提出有名的贫血模型或失血模型,他认为实体模型对象中只有弱行为setter和getter方法,没有真正行为,好像缺少血液的人,不和谐了,而Eric认为,在DDD中,领域中的一些概念是不能作为模型中的对象来处理的,如果将这些功能概念强行加给实体对象和值对象,会破坏模型中对象的定义.我们的DDD项目中都是以失血模型存在着,所以,Eric呼唤:建模专家必须懂得实现,懂得软件技术。

 

分享到:
评论

相关推荐

    Domain-Driven Design: Tackling Complexty in the Heart of Software -- 领域驱动设计: 软件核心复杂性应对之道》

    关于DDD可参考InfoQ的Mini Book Domain Driven Design Quickly , 还有 Banq 的文章 实战DDD(Domain-Driven Design领域驱动设计), 和 领域模型驱动设计(DDD)之模型提炼 。 本书分为四部分,第一部分讲述了领域模型...

    Domain-Driven Design领域驱动设计

    领域驱动设计(Domain-Driven Design,简称DDD)是一种处理复杂软件核心问题的方法,由Eric Evans在其2002年的著作中首次系统阐述。DDD是一种综合性的设计理念,它强调将软件开发的焦点放在业务领域,并围绕业务领域...

    Domain-Driven Design (Tackling Complexity in the Heart of Software

    领域驱动设计(Domain-Driven Design,简称DDD)是一种软件开发的方法论,它由Eric Evans在其2004年的同名书籍《领域驱动设计:软件核心复杂性应对之道》中提出。DDD的核心思想是,软件系统的复杂性不仅仅是由技术...

    Domain-Driven-Design-Distilled.zip

    DDD(Domain-Driven Design 领域驱动设计)是由Eric Evans最先提出,目的是对软件所涉及到的领域进行建模,以应对系统规模过大时引起的软件复杂性的问题。整个过程大概是这样的,开发团队和领域专家一起通过 通用...

    .NET Domain-driven design with C# 源码 chapter 2

    .NET框架与C#语言结合应用领域驱动设计(Domain-driven Design, DDD)是现代软件开发中的一个重要实践。DDD旨在通过将复杂的业务逻辑集中在核心领域模型上,提高软件系统的可读性、可维护性和可扩展性。本章节我们将...

    Domain-Driven Design –Tackling Complexity in the Heart of Software.pdf

    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 ...

    Domain-Driven Design Distilled

    《领域驱动设计精粹》(Domain-Driven Design Distilled)是Vaughn Vernon所著的一本关于领域驱动设计(Domain-Driven Design,简称DDD)的入门指南。DDD是一种软件开发的方法论,它强调在软件开发过程中,开发者...

    Domain-Driven Design Complexity In Software.pdf

    ### 域驱动设计(Domain-Driven Design, DDD):应对软件核心复杂性 #### 概述 《域驱动设计:应对软件核心复杂性》一书由埃里克·埃文斯(Eric Evans)撰写,Addison Wesley出版社于2003年8月20日出版。该书共560...

    JavaScript Domain-Driven Design(PACKT,2015)

    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 ...

    Domain+Driven+Design 领域驱动设计

    领域驱动设计(Domain-Driven Design,简称DDD)是由Eric Evans在其2003年的同名书籍中首次提出的软件开发方法论。该方法论的核心思想是将软件开发的焦点集中在业务领域模型上,强调软件系统与现实世界业务领域的...

    Implementing Domain Driven Design

    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...

    Patterns, Principles And Practices Of Domain-driven Design

    域驱动设计(Domain-Driven Design, DDD)是一种面向对象的设计方法,它强调的是从业务领域出发,将业务需求和规则转换为软件模型。DDD认为,一个好的软件系统应该是基于对业务领域的深刻理解而构建的,并且能够随着...

    Domain-driven design

    领域驱动设计(DDD)是一种软件开发方法,由Eric Evans在其同名著作《领域驱动设计:软件核心复杂性应对之道》中提出。DDD的核心思想是通过深入理解和表达业务领域的复杂性来构建高质量的软件系统。这种方法强调了将...

    领域驱动设计模式、原理与实践[英文版]

    Millett S., Tune N. - Patterns, Principles, and Practices of Domain-Driven Design (Programmer to Programmer) - 2015.pdf

Global site tag (gtag.js) - Google Analytics