什么是领域驱动设计(Domain Driven Design)?
本文是从 What is Domain Driven Design? 这篇文章翻译而来。
”…在很多领域,专家的作用体现在他们的专业知识上而不是智力上。“
-- Don Reinertsen
领域驱动设计(Domain Driven Design)是一种软件开发方法,目的是让软件系统在实现时准确的基于对真实业务过程的建模并根据真实业务过程的调整而调整。
传统的开发工作趋向于一种以技术为先导的过程,需求从业务方传递到开发团队,开发人员依据需求上的描述创造出最有可能的假想。
在瀑布开发过程中,这导致了大量的需要频繁校对,分析,复核和审批的需求文档。之后这些文档被交给开发团队去变成能够运行的软件。
敏捷开发方法同样可以采纳瀑布模式过程中产生的需求文档,但敏捷方法在实际的处理过程中会把它们分成很小的任务和“故事”,之后的开发工作将依据这些任务的排序。
领域驱动设计很大程度上使你从这两种截然不同的结果中抽身出来,让你能看到需求是如何在第一现场被收集到——如果你愿意看的话,它在动手先做的方式和在最后一分钟才做的方式之间做了弥补。
领域驱动设计方式知道需求是永远不会“完成”的,需求就像一个活的文档。更重要的是,这些仍待讨论的活文档实际上就是软件自身——所有的文档都是程序代码的一种影像,一种演示品。
随着软件系统的开发和发展,你对各种问题的理解也会更深——领域驱动设计就是要通过深入的理解问题来找到问题的解决方案。
然而,领域驱动设计真正的不同之处却是,它把软件系统当作业务过程的一个影射,是使能动,而不是驱动。领域驱动设计是要你深入到业务过程中,了解业务术语和实践方法。技术方面的事被放在了第二位,只是最终的一种手段而已。
Ubiquitous语言(UL)是领域驱动设计的中心——这是一种共有的不断成长的语言。它是一种来源于业务术语、经过开发团队的补充而产生的协商后的语言。如果一个业务人员不懂得UL里的一个术语,有可能是UL需要改进发展。如果一个技术人员不懂得UL里的一个术语,有可能是他们需要跟领域专家进行交流。
领域专家是领域驱动设计里第二重要的组成部分——这些人能够对这个领域有深入的了解,包括这个业务本身。这些人构成了开发过程中必要的组成部分。他们也许像一些敏捷开发方法里传统的产品拥有者那样不需要“全天候”的在职,但他们必须在开发过程中能被持续的接触到,而且随时准备好参与到开发过程中。领域专家不能被当作门外人,而应被当作领域驱动设计过程中的核心——他们非常像是开发团队中的一部分,就像普通的开发者和测试者一样。
领域驱动设计没有开始和结束——它是一个不断的再评估,再重构,再建模,再设计的持续过程——每一次的对话都会使你对问题有更进一步的理解。领域驱动设计没有“完成”点——它永远都在进行;Ubiquitous语言会不断发展和成长,领域模型随着对业务理解的改变而改变,代码不断的再组织和重构来更好的表现你的理解。
各种模拟产物产生又抛弃,而唯一真正有意义的只有代码。它是解决方案的唯一表达,是一种不再抽象的表达。文档是用来解释和描述系统的,而只有代码能不失分毫的做到这些。这就是说,在领域驱动设计里,代码必须保持高质量,要清晰,要有表达力,没有技术上省略和专门用语,尽可能的要让代码能够在被解释时对领域专家有些意义。
领域驱动设计里没有精巧的代码,也没有奇特的处理过程,或“你不需要知道”的模块。领域专家不需要成为开发人员来理解软件系统里用来做这些工作的关键部分是什么。他们同样也不需要考虑数据库或批处理任务或其他技术相关的方面。
领域驱动设计是敏捷方法的终极表达——它是用来处理不断变化和发展的需求的——正如任何一个从未涉足软件项目的人都知道——一个项目的需求从开始到结束保持一成不变是极其罕见的,绝大多数情况是它会随着业务的增长和变化而变化。
通过不断的交流,领域驱动设计会指导你用软件最精确的表达你的业务过程。
什么是领域驱动设计(Domain Driven Design)?的更多相关文章
- 领域驱动设计(Domain Driven Design)参考架构详解
摘要 本文将介绍领域驱动设计(Domain Driven Design)的官方参考架构,该架构分成了Interfaces.Applications和Domain三层以及包含各类基础设施的Infrast ...
- [转载]领域驱动设计(Domain Driven Design)参考架构详解
摘要 本文将介绍领域驱动设计(Domain Driven Design)的官方参考架构,该架构分成了Interfaces.Applications和Domain三层以及包含各类基础设施的Infrast ...
- 领域驱动设计(DDD:Domain-Driven Design)
领域驱动设计(DDD:Domain-Driven Design) Eric Evans的"Domain-Driven Design领域驱动设计"简称DDD,Evans DDD是一套 ...
- 领域驱动设计(DDD:Domain-Driven Design) 介绍
Eric Evans的“Domain-Driven Design领域驱动设计”简称DDD,Evans DDD是一套综合软件系统分析和设计的面向对象建模方法,本站Jdon.com是国内公开最早讨论DDD ...
- 领域驱动设计(DDD:Domain-Driven Design) 转摘自:http://www.jdon.com/ddd.html
Eric Evans的“Domain-Driven Design领域驱动设计”简称DDD,Evans DDD是一套综合软件系统分析和设计的面向对象建模方法,本站Jdon.com是国内公开最早讨论DDD ...
- 关于领域驱动设计 DDD(Domain-Driven Design)
以下旨在 理解DDD. 1. 什么是领域? 妈妈好是做母婴新零售的产品,应该属于电商平台,那么电商平台就是一个领域. 同一个领域的系统都有相同的核心业务. eg: 电商领域都有:商品浏览.购物 ...
- 【系统架构】软件核心复杂性应对之道-领域驱动DDD(Domain-Driven Design)
前言 领域驱动设计是一个开放的设计方法体系,目的是对软件所涉及到的领域进行建模,以应对系统规模过大时引起的软件复杂性的问题,本文将介绍领域驱动的相关概念. 一.软件复杂度的根源 1.业务复杂度(软件的 ...
- 后端开发实践系列之二——领域驱动设计(DDD)编码实践
Martin Fowler在<企业应用架构模式>一书中写道: I found this(business logic) a curious term because there are f ...
- 领域驱动设计(DDD)编码实践
写在前面 Martin Fowler在<企业应用架构模式>一书中写道: I found this(business logic) a curious term because there ...
随机推荐
- Django model 中meta options
之前学了abstract,这是后续的一些options app_label: app_label的作用是:如果一个model定义不在INSTALLED_APPS中,那么此时就需要声明,这个model的 ...
- 关于UIView的autoresizingMask属性的研究【转】
在 UIView 中有一个autoresizingMask的属性,它对应的是一个枚举的值(如下),属性的意思就是自动调整子控件与父控件中间的位置,宽高. 1 2 3 4 5 6 7 8 9 enum ...
- 【Tree 3】树形结构数据加载的思考
前面两篇文章,分别介绍了使用递归和非递归算法加载树形结构数据的方式,本篇文章,则是自己闲下来的时候,进行的一点小思考. 一.什么地方会用到树形结构 刚开始一看到这种结构的时候,最先是想到了家谱.家谱就 ...
- 使用Supervisor管理Celery进程。
讲过一篇celery的,但是celery启动后并不是daemon的,在生产环境中这肯定是不可以的,那怎么办呢? 这就需要使用supervisor进行进程管理了,下面详细介绍. 一. superviso ...
- vs2010 编译boost库
下载boost_1_49_0 打开vs2010工具dos, 再进入E:\boost_1_49_0 运行: bootstrap.bat 然后再运行: bjam stage --toolset=msvc- ...
- HashMap的面试总结(摘抄)
HashMap的工作原理是近年来常见的Java面试题.几乎每个Java程序员都知道 HashMap,都知道哪里要用HashMap,知道HashTable和HashMap之间的区别,那么为何这道面试题如 ...
- TestLink安装全攻略
TestLink安装全攻略 此文章转自该链接--http://www.cnblogs.com/Tcorner/archive/2011/07/26/2117296.html 安装前准备 需要下载xam ...
- thinkphp加载 和url_model
1.加载thinkphp.php requrie('./ThinkPHP/ThinkPHP.php'); 2.加载核心文件 ./thinkPHP/LIB/core 3.加载项目的文件 分析URL 调用 ...
- 【软件工程】电梯调度程序需求分析 李亚文&&郭莉莉
2014年3月4日(14:00-16:00) 为了进一步理解电梯工作的原理,我们特地到石家庄铁道大学春晖楼坐了电梯:春晖楼东办共有电梯两部,最高楼层为11层,最低楼层为-1,两电梯可共同使用.结合调查 ...
- 生产力工具之vimwiki 和 calendar
vimwiki下载地址: http://www.vim.org/scripts/script.php?script_id=2226 calendar下载地址: https://github.com/i ...