十五年品牌 - 广西网站建设 , 柳州网站建设 , 南宁网站建设,桂林网站建设,来宾网站建设

柳州网站建设之领域驱动设计入门

 二维码 5
发表时间:2021-10-28 14:51

领域驱动设计(DDD)是由Eric Evans发明的一个概念。他在2004年出版的《领域驱动设计》一书(即”大蓝皮书“)中探讨了这个概念。我将概要地介绍下DDD的方方面面。本文将探讨DDD“为什么?”和“是什么?”。在这里,我不会深入探讨具体的主题。不过,我会说明重要术语的定义。


领域驱动设计(DDD)是由Eric Evans发明的一个概念。他在2004年出版的《领域驱动设计》一书(即”大蓝皮书“)中探讨了这个概念。


那么在DDD上下文中,领域是什么?


领域是知识、影响或活动的范围。用户应用程序的主题域即软件的领域。


我将概要地介绍下DDD的方方面面。本文将探讨DDD“为什么?”和“是什么?”。在这里,我不会深入探讨具体的主题。不过,我会说明重要术语的定义,就像上面的“领域”。你会发现,共享词汇也是DDD本身的一部分。


首先,你要问自己,这些概念是否仍然有效?


1 DDD的意义

DDD不是一种特定的技术,它是一个概念。许多现代概念都直接使用DDD。下面这段话出自Sam Newman《微服务设计》一书的**页。


Eric Evans的《领域驱动设计》一书帮助我们理解了用代码呈现真实世界的重要性,并且告诉我们如何更好地进行系统建模。


此外,IBM Garage事件驱动参考架构有一章专门介绍DDD方法。


至于DDD的意义,可以说时至今日,它确实非常有效。说完了最新的情况,让我们继续探讨 “为什么?”和 ”是什么?“


2 为什么会有DDD

DDD不是一种特定的技术,它是一个概念。许多现代概念都直接使用DDD。下面这段话出自Sam Newman《微服务设计》一书的**页。


为什么会需要像DDD这样的东西?Eric Evans在其著作的副标题中提供了一条很好的线索:


攻克软件核心的复杂性


通常情况下,软件项目的主要复杂性在于领域本身。你无法改变领域的复杂性。你可以试试告诉你的银行客户,你将专注于支付,而放弃贷款业务,因为它太复杂了。


此外,我们不是为了开发软件而开发软件。我们是为了解决问题以及做些改进:


软件的核心是为用户解决领域相关问题的能力。其他所有功能,虽然也很重要,但都是服务于这一基本目的。


3 DDD是什么

微服务的关键特征之一就是其松散的耦合,而这一特征则允许它们单独进行开发、部署、访问控制和扩展。


那么DDD是什么?DDD无法用一两个句子定义。它是一种开发解决多个问题的复杂软件的方法:


关注领域的核心复杂性和机会;

领域专家和软件专家合作探索模型;

在有界上下文中说一种通用语言。

(注意正文中的绿色词汇。这些是DDD中特有的术语,我会给它们下个定义,就像给领域下定义一样。)


这三点是对DDD非常高度的概括。接下来,我会一个一个地介绍。


关注领域

关注领域的核心复杂性和机会。


这一点我就不过多介绍了。根本的东西我在上面“为什么”这一部分里都已经说明了。软件是没有自我目的的。


不要把这点和“关注业务”弄混了。核心复杂性和机会与我们所说的“业务”并不是一回事。想一下Twitter。在它的功能中,互相关注等功能并非主要的复杂性所在。主要的复杂性更多的可能还是来自扩展平台。


探索模型

领域专家和软件专家合作探究模型。


模型是应对上述复杂性的一种方法。但首先,我们要弄清楚模型是什么?


在DDD上下文中,模型是什么?


描述领域部分方面的一系列抽象,可以用于解决与该领域相关的问题。


另一种来自Eric Evans的描述:


模型是一种简化。它是对现实的解释,它将有助于解决现有问题的重要方面抽象出来,而忽略掉不相干的细节。


我觉得有必要明确下它不是什么:它不是一张图(因此也不是实体关系图(ERD),虽然DDD也使用实体这个术语)。图只是帮我们就模型进行交流。在DDD的语境下,你会看到许多图。没有什么**的建模专用语言。最常用的是一些类似UML的图,或者仅仅是一幅手绘草图。重要的不是图,而是图背后的概念。


选择“探索(explore)”而不是像“写下”这样的词,是有其用意的。要获得一个模型,需要经过一个迭代过程。建模这样的事不可能一次性完成。领域里会有新的洞察,新的或变化的问题,诸如此类。这是一个持续探索的过程。

来源:芋道源码


会员登录
登录
其他帐号登录:
留言
回到顶部