在一个动态且不断改动的技能世界中,构建满意企业和用户需求与希望的软件或许是具有应战性的。软件公司逐渐需求一种可行的方式来使事务与产品团队之间的交流更加透明。范畴驱动规划(DDD)办法经过促进对主题内容的深刻了解和开发人员与事务专家之间的继续协作,协助处理这个问题。实际上,开发者经过不断的交流获得了对底层范畴和事务规矩更深化的了解。与此同时,利益相关者对技能才能和约束有了更好的了解。

例如,Standish Group 对 100 个项目的分析发现,由于在需求和规划阶段缺少范畴常识,70% 的返工产生了,这证实了 DDD 促进了企业与开发者之间的了解。

依据 Forrester 的数据,实践迭代式 DDD 模型的开发团队的作业速度比他们在前期分析上花费数月时间快 60%。

由剑桥大学进行的研究发现,在 DDD 结构内建模范畴常识可以使团队生产力增加 29%。明显,这种办法解锁了内部范畴常识。

那么,为什么公司需求这种办法,谁在运用它,以及它的实质是什么呢?

范畴驱动规划的中心准则

范畴中心规划依据几个要害概念,这些概念使得创立以范畴为中心的软件成为或许。

  • 首先是对范畴模型的优先考虑。它代表了潜在的商业实体、行为、联系和规矩。代码实现直接反映范畴模型,而不是相反。这个模型是迭代开发的,而不是预先确定的。
  • 另一个中心准则是开发一种遍及言语。这种开发人员和事务专家共享的词汇规范化了术语和范畴常识,消除了团队间的歧义和不一致。
  • DDD 还包含战略和战术规划阶段。战略规划重视于范畴的高层安排,如限界上下文和子范畴。战术规划涵盖了形式和较低层级的实现组件,如实体、服务和仓储。

其他概念包含强调探究性建模而不是分析,继续的范畴沉浸,以及运用遍及言语进行文档化。

经过结合建模、言语和依据上下文的技能,DDD 使得创立的体系不仅重视技能要求,还重视范畴的中心概念。

在这个布景下,立即想到的是六边形架构和洁净架构,它们共享任务别离的一起方针。你可以经过将运用程序划分为松散耦合的组件,从外部问题中阻隔中心事务逻辑。

让咱们来看看界说战略和战术规划的元素,以及它们怎么影响成果。

战略规划

在 DDD 的布景下,战略规划是软件开发的一个重要部分。它包含以下首要方面:

  • 概览: 战略规划始于对问题范畴和商业价值的概览。在这一步,将探究要害概念和流程,并识别要害商业需求和方针。
  • 问题空间和处理方案空间: 战略规划结构识别出两个首要的概念空间:问题空间和处理方案空间。问题空间重视于探究和分析事务范畴,识别实体、聚合、服务以及它们之间的联系。处理方案空间则重视于创立一个有用处理问题空间中识别出的问题的模型。
  • 限界上下文: 限界上下文是范畴的有限子划分,对应于特定开发团队的职责范畴。每个上下文界说其实体、聚合、服务和规矩。办理上下文鸿沟关于阻隔和了解范畴的不同部分至关重要。
  • 中心范畴: 中心范畴是事务的中心,它是最重要和最有价值的部分。在战略规划中,中心范畴至关重要,由于它是开发的焦点,并包含界说软件功用的根本抽象和事务规矩。

战略规划在 DDD 的布景下,使得经过考虑事务范畴的特点来创立软件开发的有用战略成为或许。这协助开发者创立满意事务要求、灵敏规模化和跟着时间的推移简单维护的软件。

战术规划

战术规划是软件开发办法论的一部分。它担任一系列界说的东西和办法,用以创立高效、灵敏的架构,这些架构反映了事务范畴,并保证数据完整性。

  1. 它从对事务范畴及其要求的概述开端。这一步分析了中心流程、实体、聚合以及它们之间的联系。方针是对范畴的中心组件有更深化的了解。
  2. 接下来,咱们重视运用程序的中心部分,也被称为中心聚合。中心聚合是首要的交互元素,包含了范畴的要害逻辑和数据完整性。它界说了中心操作和事务规矩。
  3. 继续评论战术规划东西包,它为咱们供应了一组规矩和形式,用以构建有用的运用程序架构。它包含值对象、实体、服务和聚合等概念。这个东西包协助开发者创立一个灵敏的架构。
  4. 运用战术规划东西包的一个比如是创立仓库。仓库担任存储和检索特定实体或聚合的数据。它们为与数据仓库的交互供应了一个单一的接口,并封装了数据存储细节。

战术规划还区分了运用服务和范畴服务。运用服务协调运用程序内不同实体和聚合之间的行动和交互。至于范畴服务,它们存储事务逻辑和只与范畴模型相关的操作履行。

总而言之,战术规划有助于创立反映事务范畴并保证数据完整性的有用架构。运用战术规划东西简化了运用程序的开发和支持,使了解和扩展杂乱范畴变得更简单。

有界上下文和遍及言语:它们在DDD中的作用

在范畴驱动规划中,有界上下文是在特定事务范畴内运用的一组模型和规矩的调集。它有助于在特定上下文中界定和约束体系的不同方面。

有界上下文代表了开发产生的鸿沟,并保证在该上下文内模型和规矩的一致性。因而,它可以具有自己的建模言语甚至是特定事务范畴的术语。

它答应开发者更好地了解和建模一个杂乱的主题范畴,并促进利益相关者的交流。有限的上下文可以并行存在,并经过界说的接口进行交互。

同样重要的概念是当咱们谈论范畴驱动规划时,不行忽视的遍及言语。

它可以被描绘为一切开发团队成员运用和了解的通用言语。

遍及言语在有限的上下文内创立和维护。它包含专业术语、短语和规矩,这些都反映了体系的事务了解和主题。这种言语作为一个熟悉的根底,便于不同团队成员之间的有用交流。

它的首要任务是协助防止由于术语或概念的不同解释和了解而引起的误解,并在某种意义上有助于更深化、更精确地建模主题范畴。

DDD带来的新处理方案的钥匙:它带来了什么,以及它适用于谁?

假如一个项目触及杂乱的事务逻辑、不断改动的流程、联系和事务规矩,它就成了施行范畴驱动规划准则的抱负候选者。经过运用DDD,开发者可以有用地导航杂乱的范畴,并创立精确反映现实世界杂乱性的软件处理方案。

DDD还高度习惯并灵敏应对未来的改动。跟着事务的演化和面对新的应战,软件处理方案有必要跟上步伐。有限上下文的明晰别离和遍及言语的运用,促进了更新和修改的无缝整合,最小化了需求进行体系范围内大规模改动的需求。其成果是滑润的过渡,减少的压力水平,以及公司的本钱节约。

范畴驱动规划的小团队力量

范畴驱动规划非常合适小型、自治的团队。”两个披萨团队”的概念便是一个例子。这个想法是团队应该满足小,以至于只需求两个披萨就能喂饱。这使得团队可以集中精力、保持一致并提高生产力。

咱们看到”两个披萨团队”的办法与DDD结合,在Netflix(这让他们可以快速扩展渠道)和Uber(他们可以灵敏地阻隔事情并办理需求动摇)等行业领袖中成功运用。

看起来,DDD就像一个独家沙龙,成员包含Netflix、Uber以及咱们谦逊的WebLab技能。咱们处在一个好公司中,不是吗?

是的,咱们运用DDD作为开发杂乱事务软件的首要办法之一。看起来咱们是少数运用它的公司之一。

有人在DEV社区门户网站上创立了一个评论:“咱们怎么找到遵循范畴驱动规划办法的公司?”

要找到DDD的实践者,跟从良好结构化的对话的踪影……或许仅仅找咱们的团队!

但有人决议主张,假如他们在提案中提到他们与DDD一起作业,你可以找到这样的公司。需求在那里,但供应并不多。

正如你所看到的,小型、严密团队在杂乱范畴中扮演着要害角色。他们可以快速堆集常识,并遍及运用他们范畴的言语。

关于采用DDD的公司来说,拥抱两个披萨团队的范式可以在各个范畴释放生产力和立异。小团队和范畴驱动规划的结合是强大的。

特别是,DDD可以实现:

  • 改善交流: 遍及言语答应开发人员和事务专家更有用地协作。
  • 事务一致性: 软件规划直接反映真实的事务流程和方针。灵敏性:模块化架构使得依据需求改动运用程序变得简单。
  • 用户重视: 重视范畴答应创立针对用户需求的定制处理方案。
  • 功率: 亲近参加的主题专家产出处理实际事务问题的产品。

DDD和小型安排:或许的应战

在较小的安排中,DDD的整合或许不像在大公司那样遍及。然而,整合的才能取决于特定需求和优先级。假如一个小安排具有杂乱的主题范畴或面对有用办理和建模事务流程的需求,DDD的整合或许是有利的。

但是,请准备面对或许呈现的妨碍,包含:

  • 资源有限:较小的安排或许具有有限的开发人员和时间,这使得施行新办法变得具有应战性。
  • 在主题建模方面的困难:DDD的整合需求对主题范畴有深化了解并正确建模。缺少软件开发经历或许是一个妨碍。
  • 抵抗改动:较小的安排或许更倾向于抵抗改动,特别是假如现有流程和软件架构已经建立。
  • 技能约束:过时的技能根底设施不支持彻底的DDD整合。事实上,并不是一切这

些妨碍都适用于一切小型安排。每个安排都有其独特的特征和应战,这些都或许影响到DDD的整合。

DDD施行:逐步开端

现在,让咱们来看看有用施行DDD的根本进程,而不被杂乱性所迷惑。

从小做起

特别是在刚接触DDD或处理大型体系时,从小开端运用DDD是正确的。挑选运用程序中一个小的、不太要害的部分,开端运用DDD。

继续学习

通常,第一次施行或许不会完美。这是一个继续学习的进程。不要由于开始的应战而泄气。了解错误并从中学习。

协作

DDD不仅仅是关于编码者。它触及到整个团队:开发者、项目经理、体系分析师、范畴专家等。它要求严密协作,以便依据事务需求进行常识共享和软件开发。

最后,正如咱们之前说过的,有必要记住,DDD并不总是一切项目的处理方案。它引入的杂乱性关于简单的运用程序来说或许是不必要的,评价其在项目中的需求至关重要。

交点:DDD与灵敏的衔接

那么,DDD与灵敏的交集是怎么表现的呢?DDD和灵敏共享相似的准则,为它们成功的整合奠定了根底。

  1. 与利益相关者的活跃互动: 在DDD中,这反映在遍及运用促进有用交流的言语中,而灵敏则侧重于协作以创造价值。
  2. 灵敏性和习惯性: 两种办法论都是可习惯的。灵敏规划用来接受和施行改动,而DDD模型则跟着范畴了解的演化而演化。
  3. 迭代开发: 灵敏专注于小进程进行软件开发。在DDD中,模型跟着演进而精细化,这又把咱们带回到DDD的迭代实质。

DDD与灵敏的衔接自身便是一种互补联系。因而,在灵敏环境中运用DDD可以简化交流,保证更好地与事务需求对齐,并交付高质量的软件。

咱们可以自信地说,依赖于范畴常识的行业在DDD专注于学习其特定范畴的杂乱性上找到了特别的价值。最终,范畴中心规划的实质在于它可以创立与事务及其客户需求严密对齐的高质量软件。

关于WebLab技能来说,DDD办法是咱们构建与客户长期技能协作伙伴联系的意识形态的中心部分。它与康威规律相一致,该规律指出,软件体系反映了构建它们的安排的通讯结构。

咱们的专业团队创立与客户范畴天然符合的架构,而范畴专家的深化参加使咱们可以创立一个触及一切人的顺利通讯链。或许越来越多的公司意识到这种办法的需求,将来会发现更多有价值的DDD优点。

毕竟,正如Eric Evans在他的书中所写的,“为了有用交流,代码有必要依据用来编写需求的相同言语——这同样是开发人员彼此以及与范畴专家交流的言语。”这强调了通用言语在DDD中的中心地位,保证一切利益相关者都可以在相同的概念结构内有用交流。

作者:Oleksandr Knyga

更多技能干货请重视公号【云原生数据库

squids.cn云数据库RDS,迁移东西DBMotion,云备份DBTwin等数据库生态东西。