首页 > 编程知识 正文

ddd领域驱动设计用的多吗,ddd领域驱动设计优点

时间:2023-05-05 01:38:48 阅读:115287 作者:3139

单击上面的“超级帅大船步进之路”,然后选择“星标”的公共编号

优秀文章,及时送达

预计读书时间: 9分钟

领域和子域

长期以来,我们认为技术是主导项目成功的重要因素。 这些重要元素通常表现在项目中使用的编程语言、框架、体系结构(如分层体系结构)、中间件和数据库等方面(如生态)。 但是技术真的是项目成功的重要因素吗?

在一个软件项目中除了技术部分外,我们最重要的是实现实现业务业务其实是实现所在业务领域的必要业务。 技术也是领域,被称为技术领域。 域驱动设计中的领域是指业务领域。

许多技术人员对技术领域的知识感兴趣。 这是因为它允许技术前沿性和探索性实践。 但是,在业务领域上的知识是黑暗的。

随着项目进展到业务领域,大家开始忙于各种前所未有的需求。 这个时候对技术领域的探索也基本成熟。 而随着新技术的出现,大家又开始了新技术的探索和实践,试图用新技术来解决以前遗留下来的未决的新需求。 这时,出现了所谓的“全面重建”。 正是这种对技术领域的不断探索,使业务领域中重要的核心知识被埋没。 但是有一天,当我们意识到业务领域非常重要的时候,你可能已经不在这个业务领域上探索技术了。

让技术水平高的技术人员深入研究分析领域的业务需要勇气。 这种勇气不是对未知复杂业务领域的挑战,而是时刻沉浸在技术探索的环境中。

这需要一些技术人员花时间深入业务领域分析领域知识并最终形成领域模式。

问题:领域中的业务是由什么组成的?

回答:需求。

问题:需求是如何构成的?

什么是领域? 域名- words百度百科对领域的解释:

学术思想或社会活动的范围。

具体指特定的范围或区域。

《领域驱动设计》中领域是指特定的业务范围,大家在该业务领域范围内开展工作。

领域这个词包含着很多意思。 通过在很多人的理解中使用领域而不是行业、项目或系统,一些人会意识到领域是行业、项目或系统。 在认识领域时,请务必注意指向的业务域。 行业、项目或系统无法准确表达领域所指向的业务域。

一个系统可能由一个或多个领域组成。 如果系统由一个领域组成,这会给大家带来错觉。

子域(Subdomain )在第一次知道子域的概念时可以考虑子域和域之间的父子关系。 其实他们不是亲子关系,而是包含关系。 如果将多个业务域(域)合并以形成更大的业务域(域),则每个域)业务域都是这个更大业务域的一部分,每个业务域都是这个更大的业务域组合起来的这个更大的业务域统称为域。

补充:一个饼图可以更好地说明域与子域之间的关系,域相当于整个饼图,子域相当于此饼图中的一个块。

subdomains这是零售商在线销售产品的示例,来源于《实现领域驱动设计》。

将零售商的所有业务视为一个领域(业务域),并将此整体业务域中的每一个视为子域。 因此,该零售商的业务域包括产品目录子域、订单子域、物流子域、开单子域、库存子域等。

这个业务域图给我们展示了几乎完整的子域划分图。 那么,这张图是如何完成划分的呢?

针对一个业务域划分子域时,往往将一个区域划分为核心域、支持子域、通用子域三种类型的子域集合。 其中,核心域是整个业务域(域)的核心,支持子域和公共子域完成非核心业务。 无论如何,在划分整个业务域时,必须首先划分核心域。

注意:三个子域不是三个子域,每种类型的子域可能有多个数量

“核心域”(Core Domain )核心域是整个业务系统的核心,所有业务都围绕核心业务域展开。 如何澄清核心域?

通常,查明核心的方式是精炼业务域

ong> 。精炼是一个持续的过程,具体来说有以下几种方式:

领域愿景说明(Domain Vision Statement)

突出核心(Highlighted Core)

内聚机制(Cohesive Mechanism)

分离的核心(Segregated Core)

抽象核心(Abstract Core)

领域愿景说明(Domain Vision Statement)

这部分的内容在《领域驱动设计》中表达地非常简洁,没有必要再做过度的解读。具体内容如下:

domain-vision-statement

并且还给出了两个“领域愿景说明”的示例:

domain-vision-statement-demos

在这两个示例中提到的模型并不是一个领域模型,而是一组领域模型。更具体地来说是要告诉我们这一组 领域模型要解决什么问题,而这个要解决的问题 正是由客户来提出的最需要 的那个功能,这个最需要的功能正是业务域中的核心。

为业务域编写“领域愿景说明”是有必要的,因为它可以让整个团队的人员都能明确什么是核心域。正是明确了核心域,才可以使整个团队朝着统一地方向 前进。

突出核心(Highlighted Core)

我们通过“领域愿景说明”可以明确什么是核心域,但这是从一个较为宽泛的角度对核心域进行说明的。我们明确核心域的目的是为了形成核心 领域模型,此时我们需要突出核心。

突出核心域中的领域模型有两种方式:

精炼文档

标明核心(Core)

精炼文档 要做的事情是创建一个最核心的概念对象的清单文档。

core-domain-docs

标明核心(Core) 要做的事情是从一个完整的领域模型文档中标记出最核心的领域模型。

分离的核心(Segregated Core) segregated-core

分离的核心的主要目的有两个:

将核心域中的非核心元素(模型)分离出去。

将非核心域中的核心元素(模块)移动到核心域中。

这两个目的都是为了让核心域更加清晰和增强核心域的内聚性。

有关核心域的更多内容请阅读《领域驱动设计》中的第十五章,其中非常详细地阐述了如何明确核心域和实现核心域。

《实现领域驱动设计》中通过问题空间 和解决方案空间 对核心域做了更直接的说明:

问题空间是领域的一部分,对问题空间的开发将产生一个新的核心域。[IDDD, P48]

核心域的范围并不一定是一次就能确认的,可能需要迭代很多次,每一次都有可能扩大或缩小。

通用子域

如果一个子域不是核心域并且被用于整个业务系统,那么这个子域便是通用子域。[IDDD, P44]

通用子域:模型中由你想当然的部分。不可否认,它们确实是领域模型的一部分,但它们抽象出来的概念是很多业务都需要的。比如:各个行业(如:运输业、银行业或制造业)都需要某种形式的企业组织图。[DDD, P282]

这两段摘取为我们描述出什么是通用子域 ,从业务域的角度来看,通用子域也是一种业务域,和核心域一样。只是没有核心域的优先级高。因为核心域是整个系统的核心,整个系统因为核心域才具有竞争性。而通用子域只是那些提供的增强功能,比如电商系统中的商品收藏、店铺收藏、用户信息等等这些功能,它们确实是电商系统中的业务,但是并不是核心业务,这些增强性的业务就是通用子域。

注意 :有些小伙伴会把通用子域 与共享内核 混淆,是因为共享内核的组成部分既有可能是核心域、支撑子域或者通用子域。

支撑子域

在业务域中,会有一些比较重要的业务,但却不是核心,那么它便是一个支撑子域。创建支撑子域的原因在于它们专注于业务的某个方面。它不像核心域在整个系统中那么重要,也不像通用子域。

总结

在一个业务域中,基本由三种类型的子域组成,分别是:核心域、通用子域和支撑子域。在分析业务域时,首先要做的事情是分析核心域,然后设计核心域,这样就能明确系统的最主要的功能。围绕着这个核心域进行展开,慢慢添加其它子域,比如通用子域和支撑子域。在开发核心域和其它子域时,要为核心域分配最高的优先级,其它子域可以根据任务的多方面因素在分配优先级。

End

推荐阅读:

工作中一些原则体会

程序员因接外包坐牢 456 天!两万字长文揭露心酸真实经历

清华大学两名博士生被开除:你不吃学习的苦,就要吃生活的苦

明天见(。・ω・。)ノ♡

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。