在Spring官网的第一个tutorial中看到了这种 设计模式

Domain Driven Design

找到了篇介绍这个得文章:

What is Domain Driven Design?

"... the key to expert performance in many fields is domain knowledge rather than intelligence." 
Don Reinertsen

Domain Driven Design is a software development methodology, intended to achieve a software system closely modelled on and aligned with real business processes.

Traditionally development tends to be a technically led process, where requirements are passed from the business to the development teams, and then the development teams go off and produce their best guesstimate at what the requirements said.

In a waterfall approach this leads to large requirements documents that are diligently collated, analysed, reviewed and approved. These documents are then given to development teams to turn into working software.

Agile approaches can also accept the requirements documents that waterfall tends to produce, but for them to actually progress forwards they must be broken to small tasks and stories which can then be queued ready for development.

Domain Driven Design to a large degree steps back from these two distinct ends of the spectrum, and looks at how the requirements are gathered in the first place - if you like, it bridges the gap between doing everything up front and everything at the last minute.

DDD understands that requirements are never 'done', but exist as a living document. More importantly, the living document in question is actually the software itself - all other documents are an artefact and reflection of the code.

As the software system develops and grows, deeper understanding of the problem grows too - DDD is all about the discovery of the solution through deeper understanding of the problem.

Where DDD really differs though is that it sees the software system as a reflection of the business process, an enabler rather than the driver. DDD is deeply concerned about the business processes, business terminology and practices. Technical concerns are largely secondary and a means to an end.

The Ubiquitous Language is at the centre of DDD - this is a shared and growing language. A negotiated language derived from the business terminology and enriched by the development teams. If a business person doesn't understand a term in the UL, then the chances are the UL needs an evolution. If a technical person doesn't understand a term in the UL then the chances are they need a conversation with a Domain Expert.

The Domain Experts are the second essential component of DDD - people who deeply understand the business domain, and the business itself. These people are integral to the development process. They may not be required "full time" like the traditional Product Owners of some Agile methodologies, but they must be accessible continually, and be prepared to invest time in the process. Domain Experts are not to be considered outsiders, but as the core of the DDD process - they are as much a part of the development team as any developer or tester.

DDD doesn't begin and end - it is a constant process of re-evaluation, refactoring, remodelling and redesign - every conversation should bring you to a closer understanding of the problem. At no point is DDD 'done' - it is always there; the Ubiquitous Language grows and develops, the Domain Models change as understanding changes, code is restructured and refactored to better represent that understanding.

Artefacts will come and go, but only one really matters - the code base. It is the only expression of the solution that is free of abstraction. While documents may try to explain or describe the system, only the code does so without losing information. This means that in DDD the code must remain of high quality, be clear and expressive, be free of technical abbreviations or jargon, and as far as possible should make at least some sense to a Domain Expert when explained to them.

Clever code doesn't work in DDD, nor do magical processes or "you don't need to know" components. Domain Experts shouldn't need to become developers to understand what the key parts of the software system is doing for them.  They also shouldn't need to think in terms of databases or batch jobs or other technical concerns.

DDD is the ultimate expression of Agile - it is about dealing with a constantly shifting and evolving set of requirements - because as anyone who has ever been involved with a software project knows - it is very rare for a requirement to remain intact from the beginning to the end of a project, and almost impossible for it to do so as the business grows and changes.

Through constant conversations, DDD will guide you to an ever more accurate software representation of your business process.


Posted 05-16-2011 3:15 AM by Jak Charlton

Filed under: Rants, Architecture, DDD, Domain Driven Design

over!!!!!!!!!!!!!!!!!!!!!!!!!!!!

原文链接:http://devlicio.us/blogs/casey/archive/2011/05/16/what-is-domain-driven-design.aspx

http://www.oschina.net/news/18245/what-is-domain-driven-design

转载于:https://www.cnblogs.com/pray/p/3592917.html

Domain Driven Design相关推荐

  1. [译文]Domain Driven Design Reference(四)—— 柔性设计

    本书是Eric Evans对他自己写的<领域驱动设计-软件核心复杂性应对之道>的一本字典式的参考书,可用于快速查找<领域驱动设计>中的诸多概念及其简明解释. 其它本系列其它文章 ...

  2. Domain Driven Design and Development In Practice--转载

    原文地址:http://www.infoq.com/articles/ddd-in-practice Background Domain Driven Design (DDD) is about ma ...

  3. [译文]Domain Driven Design Reference(五)—— 为战略设计的上下文映

    本书是Eric Evans对他自己写的<领域驱动设计-软件核心复杂性应对之道>的一本字典式的参考书,可用于快速查找<领域驱动设计>中的诸多概念及其简明解释. 其它本系列其它文章 ...

  4. [译文]Domain Driven Design Reference(三)—— 模型驱动设计的构建模块

    本书是Eric Evans对他自己写的<领域驱动设计-软件核心复杂性应对之道>的一本字典式的参考书,可用于快速查找<领域驱动设计>中的诸多概念及其简明解释. 其它本系列其它文章 ...

  5. 初探领域驱动设计(Domain Driven Design)

    前言: 我个人在学习DDD的过程中,早期翻找各种资料的时候,看到了很多名词:战略设计.战术设计.聚合根.实体.值对象.界限上下文...这些繁多的名词定义配合上几乎少的可怜的实战例子,让我在翻阅了大量资 ...

  6. DDD(Domain Driven Design) 领域驱动设计从理论到实践 四

    - 接上 SOA 架构 ​     面向服务架构(Service Oriented Architecture,SOA)对于不同的人来说意思不同.这里梳理一下SOA原则: 服务契约 : 通过契约文档,服 ...

  7. 实施领域驱动设计(Implementing Domain Driven Design翻译)

    实施领域驱动设计(Implementing Domain Driven Design翻译) 引言 介绍 这是实现领域驱动的实用指南设计(DDD).虽然实现细节依赖于ABP 框架基础设施,但是核心概念. ...

  8. DDD(domain driven design)-领域驱动设计

    domain driven design-领域驱动设计 领域驱动设计概述 背景 软件架构模式的演进 概念 分层架构与六边形架构 分层分包 复杂是我们软件生涯的一生之敌. 分层架构 & 面向过程 ...

  9. 领域模型驱动设计(Domain Driven Design)入门概述

    软件开发要干什么: 反映真实世界要自动化的业务流程 解决现实问题 领域Domain Domain特指软件关注的领域 在不能充分了解业务领域的情况下是不可能做出一个好的软件 领域建模 领域模型驱动设计 ...

最新文章

  1. cesium 3dtiles 加载本地数据_Meteva笔记:加载本地观测数据
  2. 转载 linux内核 asmlinkage宏
  3. 解决AIX报错0506-342 无法挂载分区问题
  4. LiveVideoStack线上分享第三季(十四):FLV封装格式介绍及解析
  5. 每日一笑 | 一些关于学编程的领悟
  6. 浅析Condition与等待通知机制
  7. ASP.NET 前端Ajax获取数据并刷新
  8. 昇腾AI计算,无惧618冲动消费
  9. 使用UIActivityIndicatorView 和多线程
  10. Go 基本语法之变量遮蔽问题
  11. 2345浏览器网址_清理流氓网站2345.com劫持浏览器
  12. [转]何为C10K问题
  13. wait放弃对象锁_121、抽象类和接口使用场合;wait和sleep
  14. 打印机后台服务器修复,修复win10出现“本地打印后台处理程序服务没有运行”的方法...
  15. 小白兔写话_小白兔写话二年级作文
  16. 从txt中读取float数据C++
  17. Python爬虫教程——入门一之爬虫基础了解
  18. 用Matlab作函数的图像
  19. 测试方法-静态,动态
  20. Android 利用MediaPlayer实现音乐播放

热门文章

  1. JAVA调用R语言之Rserve
  2. mysql表名不区分大小写_设置mysql表名不区分大小写
  3. python部署脚本_vsftp一键部署脚本
  4. ubuntu18 python_ubuntu18.0.4 python 开发环境
  5. 15、计算机图形学——基于AABB进行光线追踪的加速(上)
  6. HALCON窗口出界解决方法
  7. 插值算法C实现(二元全区间)
  8. MFC创建属性表单“所需资源不存在”错误解决方法
  9. python程序设计课后答案祁瑞华_清华大学出版社-图书详情-《Python 程序设计》
  10. java继承的知识点_Java知识点梳理——继承