首页 > 其他分享 >DDD精粹速读(一)

DDD精粹速读(一)

时间:2024-08-22 23:48:27浏览次数:11  
标签:精粹 速读 语言 子域 业务 设计 上下文 DDD

1 你需要知道的 - 战略设计

DDD是一种软件设计和构建方法,其重点在于独立于数据持久化等技术问题,准确表达业务规则。

不幸,DDD 对新手来说极具挑战性,部分原因是它有许多独特的概念需要学习。本文我简要介绍这些重要的思想,以便你能自信继续你的 DDD 旅程。

第一部分将侧重于与所有参与软件开发的人相关的概念,而不仅仅是开发人员。第二部分专门针对编码人员,但无论如何你都可以随意查看!

2 我只剩一分钟空闲!

如果你只能从这篇文章中记住两点,那么 DDD 的核心主张是:

2.1 模型驱动设计

在自包含的领域模型中建模业务流程和规则是重中之重。从数据库设计到架构的其他所有内容都是次要的考虑因素。

2.2 通用语言

开发生命周期中的每个人都应该在特定上下文中使用领域/业务语言进行沟通。理想情况下,会维护一些轻量且易于访问的通用语言文档。

3 战略设计和战术设计

DDD 包含两个相关的学科:战略设计战术设计

战略设计

涉及大局观:理解业务需要解决的问题;业务如何获得竞争优势;团队之间的关系;并在考虑这些问题的情况下,决定要构建什么软件。

战术设计

涉及使构建有用领域模型更简单的模式、工具和实践。当我们需要建模复杂的业务逻辑或未来可能引入复杂性时,我们使用战术设计。

本质上:

  • 战略设计是关于我们需要构建什么
  • 战术设计是关于我们如何构建它

4 通用语言

无论是战略设计还是战术设计,其核心思想都是通用语言。这是一组明确且定义良好的术语,密切反映了业务环境中的语言。在对话、需求和代码中一致使用通用语言,可以消除从开发者术语到业务术语之间频繁转换所带来的负担和错误。

5 问题空间和解决方案空间

想象一下,一家公司提供外包的仓库运营服务(WOaaS)。它的“独门绝技”在于如何管理仓库库存,但它还需要进行销售、广告、跟踪工时等。

每个问题区域都可以被描述为一个子域。对于这家 WOaaS 公司,一个简化的问题空间地图可能如下:

图1: 一个分为四个部分的子域/问题空间简化图,标签为交付/收集、库存、销售和财务

在一个领域中识别问题区域称为问题空间分析。这需要与领域专家,即最了解业务的人密切合作。

将问题空间映射到当前的企业架构上,就得到了解决方案空间

图2: 一个分为四个部分的“现状”解决方案空间图。交付/收集部分有一个标记为第三方 SaaS 的紫色圆圈。另一个更大的紫色圆圈标记为遗留系统,覆盖了剩下的销售、库存和财务部分

接下来,我们想要确定一个更理想的解决方案空间。为此,反思通用语言的一个后果是很有帮助的。

6 有界上下文

在我们的例子中,一个遗留系统试图解决多个问题区域。尽管有才华的个人付出了最大的努力,它可能还是会因为一个简单的原因而面临高缺陷率和维护成本。

在每个子域中,词语和短语都有特定的含义。一个拥有冲突术语的代码库必然会迫使团队成员创建一种新的、即兴的语言,并且必须将其转换为业务语言。不可避免地,这会导致错误、误解、入职缓慢、部落知识等各种问题。

通过试图创建满足多个子域需求的软件,我们的模型变得臃肿、混乱且含糊不清,导致性能问题和复杂性升级。

战略设计建议每个子域单独使用一个系统。我们可以将这些系统描述为有界上下文,在每个上下文内都有明确的通用语言

现在,回到 WOaaS 公司。我们如何确定一个更理想的“未来”企业架构?我们应该构建什么才能实现最佳的业务结果?

7 核心领域

应该在业务创造竞争优势的子域中投入最多的资源,这些子域就是核心领域。在我们的例子中,这是库存子域。

应该为库存子域创建一个有界上下文,并组建最好的团队来开发它。

图3: 一个分为四个部分的“未来”解决方案空间简化图。交付/收集部分有一个标记为第三方 SaaS 的紫色圆圈。在库存部分有一个更大的紫色圆圈,标记为首要任务:库存有界上下文。另一个较小的紫色便签标记为遗留系统,覆盖了销售和财务部分

其他子域被称为通用子域支持子域。尽管它们很重要,但无论发票系统多么“美观”,它都不会使企业在竞争中脱颖而出。覆盖这些子域的系统可能是商业现成产品或外包开发的候选者。

核心领域值得最大的投资和 DDD 的战术设计的全力支持……你可以在本系列的第二部分阅读更多内容。

领域模型:仅描述业务环境中相关事物的行为、属性和交互的代码。它完全不涉及运行时环境、持久化、托管环境等问题。

关注我,紧跟本系列专栏文章,咱们下篇再续!

作者简介:魔都架构师,多家大厂后端一线研发经验,在分布式系统设计、数据平台架构和AI应用开发等领域都有丰富实践经验。

各大技术社区头部专家博主。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。

负责:

  • 中央/分销预订系统性能优化
  • 活动&券等营销中台建设
  • 交易平台及数据中台等架构和开发设计
  • 车联网核心平台-物联网连接平台、大数据平台架构设计及优化
  • LLM Agent应用开发
  • 区块链应用开发
  • 大数据开发挖掘经验
  • 推荐系统项目

目前主攻市级软件项目设计、构建服务全社会的应用系统。
本文由博客一文多发平台 OpenWrite 发布!

标签:精粹,速读,语言,子域,业务,设计,上下文,DDD
From: https://www.cnblogs.com/JavaEdge/p/18374999

相关文章

  • DDD的函数式编程实现
    DDD是一种成熟的软件设计方法,旨在确保领域专家和开发人员能够有效合作,创造出高质量的软件。本文介绍咋将FP(函数式编程)应用于DDD的实现,使其既优雅又简洁。C4模型中,软件架构图分为四个层次:“系统上下文”、“容器”、“组件”和“代码”。“组件”是构成容器的基本单位,也是本文描......
  • 当SOA遇到DDD
    本文讨论软件设计中的决策,特别是关于将较大的系统拆分为多个可独立部署的服务端点。不会特别讨论【服务端点设计】,但我想探讨一下为创建多个服务应用程序进行构思的阶段。面对复杂问题,通常试图理解复杂性的各部分。将问题拆解为更易于理解和处理的小模块,可以更有效地应对。如同......
  • DDD领域驱动设计的原理与实践
    目录什么是DDD领域驱动设计?定义与概念:核心思想:核心概念:核心原则:优势与应用:与微服务架构和传统三层架构的关系:理解领域模型举例统一语言(UbiquitousLanguage)实体(Entity)值对象(ValueObject)聚合(Aggregate)仓储(Repository)领域服务(DomainService)限界上下文(Bounded......
  • 一种很变态但有效的DDD建模沟通方式
    本文书接上回《这就是为什么你学不会DDD》,关注公众号(老肖想当外语大佬)获取信息:最新文章更新;DDD框架源码(.NET、Java双平台);加群畅聊,建模分析、技术实现交流;视频和直播在B站。 https://mp.weixin.qq.com/s/TJEtclwcJydiE58pjWpXXw 背景前文说到,我们在建模的时候要放下......
  • 多租户、模块化、DDD框架、开箱即用
    .NET8+Blazor多租户、模块化、DDD框架、开箱即用前言基于.NET8的开源项目,主要使用WebAPI+Blazor支持多租户和模块化设计,DDD构建。可以帮助我们轻松地搭建起一个功能完善的Web应用程序。除了帮助你快速构建应用程序之外,项目也可以当做学习资料。我们可以从中了解到多......
  • 这就是为什么你学不会DDD
    本文书接上回《为了给Javaer落地DDD,我们不得不写开源组件》,欢迎关注公众号(老肖想当外语大佬),获取最新文章更新和DDD框架源码,视频和直播在B站。https://mp.weixin.qq.com/s/Nsc3hwl4u9je7DaXsC05mg  背景我们在《这是DDD建模最难的部分(其实很简单)》一文中介绍了一个关于......
  • 为了给Javaer落地DDD,我们不得不写开源组件
    本文上回书接《这是DDD建模最难的部分(其实很简单)》,欢迎关注我的同名公众号。https://mp.weixin.qq.com/s/HZKMLF0_I10iczzp2mAR-w 故事背景2013年中,我们的Java后端团队为了落地DDD,全面引入了dotnet技术栈,具体过程和成果,可以看我的B站频道《Java8到.NET8,团队升级报告-第......
  • 这是DDD建模最难的部分(其实很简单)
     本文书接上回《为了落地DDD,我是这样“PUA”大家的》,欢迎关注我的同名公众号。https://mp.weixin.qq.com/s/DjC0FSWY1bgJyLPIND5evA 什么是最重要的事 如果你认真读过前面的文章,那么一定知道我们的核心逻辑:领域驱动是一种价值观,这个价值观是:“领域(边界)”的明确是软件设......
  • .NET8 中空引用处理以及DDD相关概念
    作为一名.NET开发者,小白很开心看到.NET版本更新后,.NET语法越来越有意思,写起来也越来越有趣。很多新的语法,虽然变化不小,但是对小白这位从.NETFramework就开始写.NET的程序员来说,那也是信手拈来。但是小白发现string都开始变为可空的时候,那还是认真的翻阅了一下相关的资料,以免不......
  • 为了落地DDD,我是这样“PUA”大家的
    本文书接上回《先有鸡还是先有蛋?这是领域驱动设计落地最大的困局》https://mp.weixin.qq.com/s/lzAZXgchCg_VyLmyo2N18Q 故事背景2023年,我加入了一个全新的团队,担任技术Leader的角色,可以算做是“空降”吧,至今已经一年有余的时间了。到目前为止,团队已经完成了领域驱动设计实......