前一篇,简单介绍了DDD战略模式的提炼问题域,这篇简单介绍它如何塑造应用程序的架构. 1.创建一个模型以解决领域问题 为每一个子域构建一个软件模型以处理领域问题并让软件与业务保持一致. 这个模型并非现实世界的模型,而更多的是构建来满足业务用例需求的一个抽象体,同时仍保持业务领域的规则和逻辑. 为了避免偶发性技术复杂性,模型要保持与基础架构代码的分离状态. 所有的模型都不是同等创建的,最合适的设计模式是基于每一个子域的复杂性需要来使用的,而非将总括设计应用到整个系统. 2.使用公共语言开启建模协作…
DDD的战术模式 DDD的战术模式(也称为模型构造块)是一个帮助创建 用于复杂有界上下文的有效模型的 模式集合. 也就是我们常说的设计模式. 问题空间 问题空间将问题域提炼成更多可管理的子域,是真对于问题域而言的. DDD问题空间的影响在于揭示什么是重要的以及在何处付出努力. 解空间 DDD解方面的内容涵盖了可以影响应用程序架构发展并让其更易于管理的模式.…
DDD在存在许多DDD模式的同时,也有大量实践和指导原则,这些都是DDD思想体系成功的关键. 1.专注于核心领域 DDD强调的是在核心子域付出最多努力的需要.核心子域是你的产品会成功还是会失败的差异化因素所在.它是产品的独特卖的点,也是构建而非购买产品的原因. 核心领域是将为你的业务提供竞争优势并产生真实价值的产品内容. 至关重要的是,团队要理解核心领域是什么. 2.通过协作进行学习 DDD强调的是开发团队和业务专家之间协作,以生产出解决问题的有用模型的重要性. 没有业务专家的协作和投入,就不能…
可以将DDD看成一种开发思想体系:它促成了一种新的以领域为中心的思维方式. 它是一种学习过程,而非最终目标,这就是DDD的最大优势. 任何团队都可以编写一个软件来满足一组用例的需求,但那些将时间和精力花在其正在处理的问题域中的团队则能够持续演化产品以满足新的业务用例. DDD本身并非一种严格的方法论,而是必须与一些迭代式软件项目方法论结合使用以构建并演化一个有用的模型. 由此可见下面的这些理解,存在很大的误区: 1.战术模式是DDD的关键 这明显不对,DDD并不是一种面向对象的设计,也不是一种以…
1.通过通用语言达成共识 通用语言,已经强调过好多遍了,在DDD再怎么重视都不为过,后面可能还会讲. 知识提炼的输出以及共识的构建就是常见的通用语言(UL). 当与业务相关人员和主题专家进行建模时,每个人都应该有意识地始终应用富含领域专有术语的通用语言.这一语言必须现实制作,并在描述领域模型和问题域时使用.该语言还应该用于模型的代码实现,使用用作类名.属性和方法名称相同的术语和概念.正是这一语言使得业务和开发团队拥有了关于软件的有意义沟通. UL用于将模型的代码描述绑定到以业务能够理解的语言和图…
业务和开发团队之间的协作是DDD必不可少的部分,并且它是处于开发阶段的产品获得成功的关键. 领域专家指的是那些从业务领域的政策和工作流程到棘手处和特性都具有深刻理解的人.能够为你的问题区域提供深刻见解的人.他们可能是对于你当前工作领域具有很强的领悟和理解的产品所有者.用户或其他任何人. 1.领域专家与业务相关人员的对比 DDD寻找到在你当前工作的领域中是主题专家的人很重要.而要找到领域专家,我们就要区分领域专家与业务相关人员. 问题空间会给出一组需求.输入和预期输出——这通常是你的业务相关人员提…
提炼问题域的意义 理解一个复杂问题域以便创建简单且有用的模型需要深入详尽的知识以及深刻的见解,这些只能通过与从内到外理解该领域的人协作得到.对模型的设计进行连续实验和探究正是DDD的能力所能实现的.只有通过协作以及共享对问题域的理解,你才能有效设计一个模型以应对业务的挑战,这样也才能具备足够的灵活性应对新出现的需求. 知识提炼与协作 复杂问题域会包含大量信息,其中一些将不适合于解决待处理的问题,并且只会分散你建模工作的实际重心. 知识提炼是从问题域中提炼出相关信息的技术,其目的是构建能满足业务用…
方式六:延迟对模型中概念的命名 对领域建模时命名很重要. 因为在不断的知识提炼过程中经常会发现已经被命名的概念与你最初理解的有出入,这时你当初的命名就会变成一个问题.其问题在于  最初选作名称的这个词所带来的“错误”联想  并且该联想还会限定你的思维方式. Gery Young(我也不认识是谁)建议,为你不确定的模型区域使用难以理解的词组成名称(例如可以用于问题域无关的 颜色 等).作为为模型区域或概念提供真实名称的替代方式,可以使用难以理解的词,直到你完全理解了一个关切问题所有的责任职责.行为…
本文是我学习Scott Millett & Nick Tune编著的<领域驱动设计模式.原理与实践>一书的学习笔记,一共会分为4个部分如下,此文为第1部分: ① 领域驱动设计的原则与实践 ② 战略模式:在有界上下文之间通信 ③ 战术模式:创建有效的领域模型 ④ 有效应用程序的设计模式 一.什么是领域驱动设计 脑图浏览:https://www.processon.com/view/5cb49b14e4b0a13c9de1042d#map 这一章主要介绍了DDD是什么,强调DDD是一种开发…