写点什么

捕获 - 嵌入 - 防护:领域驱动设计的指导原则

  • 2017-07-12
  • 本文字数:1016 字

    阅读完需:约 3 分钟

在使用领域驱动模型(DDD)核心理念和实践作为软件设计和开发的指导方针时,可以概括为三个原则:捕获、嵌入、防护。这是 Steven A. Lowe 在今年的 DDD 交流大会演讲时提出的。为了采取积极的行动,我们通过掌握刚好够用的信息来捕获领域模型。我们将模型嵌入到代码和对话中。我们保护领域模型免受其他领域的侵蚀,尤其是技术领域。

在 Thoughtworks 首席顾问 Lowe 看来,DDD 的出现是一种突破,因为它打破了对企业数据模型的错误沉迷,并代之以专注于合作领域的、独立但重叠的模型。他强调,DDD 改变了软件开发的关注点和范围,从技术视角转向了以业务目标指导探索和解决方案。他认为,虽然人们对于 DDD 还存在一些误解,但他指出,那些都是错的:

  • DDD 很难。不,它需要专注和自律,但编程也是如此。
  • DDD 会带来额外负担。除非你认为没有必要了解一个领域。
  • DDD 仅适合复杂的领域。也许复杂的领域最需要,但这种理念肯定是普遍适用的。

捕获的目的是可视化领域的思维模型,让其具备交互性,从而使所有人都达成一致。在 Lowe 推荐的模型创建方法中,其中一种是把所有人都召集到一个房间里,让他们专注于领域活动。这项技术被称为事件风暴——一种由 Alberto Brandolini 创建的集体建模方法。Lowe 发现,这种方法非常强大,可以最大化学习速度,最小化学习负担。

在将领域模型嵌入到代码时,两个重要的部分是命名和组合,前者可以反映领域意图,而后者可以反映领域行为。Lowe 指出,如果你不能给一个东西起个好名字,则可能说明你对你要命名的东西不够了解。由于文档和图表都会过期,所以代码才是唯一可靠的事实来源。通过将领域模型嵌入到代码,就可以保证模型永远正确,而且对于开发人员随时可见。在更高层面上,领域专家也可以读懂代码。

为了保护领域模型免受侵蚀,我们使用边界将子领域隔离开。上下文的边界是其接口,即进进出出的命令和事件。但是,边界的强度也很重要,需要在接口中完成什么验证和转换?一种实用的方法是使用模块从物理上隔离子领域。这样做的好处包括,代码库耦合度更低,更有弹性。Lowe 指出,争取在编码的第一时间避免技术债务比后续消除它更简单。

Lowe 最后强调,捕获 - 嵌入 - 防护是一个迭代过程,会随着每个步骤重复多次,从较小的经过验证的模型逐步构建出一个领域模型。他还指出随时随地使用领域驱动设计的重要性;如果你不是有意对领域建模,那么你就不会无意中为其他东西建模。

查看英文原文: Capture - Embed - Protect, Guidelines for Domain-Driven Design

2017-07-12 19:001710
用户头像

发布了 1008 篇内容, 共 390.9 次阅读, 收获喜欢 344 次。

关注

评论

发布
暂无评论
发现更多内容

Nautilus Chain:主权模块化区块链的早期实践

股市老人

UE像素流送是什么?像素流推流原理介绍

3DCAT实时渲染

云流化 实时渲染云

Last Week in Milvus

Zilliz

非结构化数据 Milvus Zilliz 向量数据库

openGauss数据库源码解析系列文章——事务机制源码解析(三)

daydayup

从电商指标洞察到运营归因,只需几句话?AI 数智助理准备好了!

Kyligence

数据分析 数智助理

Ubuntu 18.04系统编译安装Redis教程。

百度搜索:蓝易云

redis 云计算 Linux ubuntu 运维

openGauss数据库荣获中国计算机学会(CCF)科技成果特等奖

daydayup

openGauss数据库源码解析系列文章——事务机制源码解析(一)

daydayup

Nautilus Chain:主权模块化区块链的早期实践

西柚子

Burp Suite 几个基本工具的使用

QE_LAB

渗透测试 测试工具 安全测试

纯实战!教你2小时学会10个组件“取代”传统Java开发

SoFlu软件机器人

Nautilus Chain:主权模块化区块链的早期实践

大瞿科技

澜舟科技同360牵头的多家产业链龙头企业,共同发起成立GPT产业联盟

澜舟孟子开源社区

滴滴是如何落地eBPF技术的?

滴滴技术

云原生 eBPF&Linux

openGauss数据库源码解析系列文章——事务机制源码解析(四)

daydayup

运用事件与定时器实现字幕滚动效果(Qt开发)

梦笔生花

海量数据×桂林银行 | 满足金融用户稳健周密需求,做好国内数据库演进的实践担当#openGauss

daydayup

openGauss 开源社区再次入选“科创中国”开源创新榜

daydayup

Oracle单表数据量大的优化思路

zhengzai7

oracle 分区

出海新模式:从蔚赫信息收购德国博世LABCAR HiL 技术看如何通过海外IP并购实现全球化布局

千流出海

千流出海

2023-07-25:你驾驶出租车行驶在一条有 n 个地点的路上 这 n 个地点从近到远编号为 1 到 n ,你想要从 1 开到 n 通过接乘客订单盈利。你只能沿着编号递增的方向前进,不能改变方向 乘

福大大架构师每日一题

福大大架构师每日一题

Docker学习路线11:Docker命令行

小万哥

Java c++ Python Go Docker

WAIC2023精彩回顾|澜舟科技首次亮相WAIC,孟子大模型专注垂直领域专业赛道

澜舟孟子开源社区

openGauss加入 CNCF Landscape

daydayup

Deel、Whatnot、Nowports,YC 净收入最高公司生意秘诀

B Impact

澜舟科技荣膺世界经济论坛评选的2023年度技术先锋初创企业

澜舟孟子开源社区

Hello,Vector DB|可能是最易上手的 Faiss 教程

Zilliz

Faiss Milvus Zilliz 向量数据库 zillizcloud

网约车服务端线上流量巡检与测试验收技术

滴滴技术

海量数据×桂林银行 | 满足金融用户稳健周密需求,做好国内数据库演进的实践担当 openGauss

daydayup

Ubuntu 18.04系统编译安装Memcached教程。

百度搜索:蓝易云

memcached 云计算 Linux ubuntu 运维

捕获-嵌入-防护:领域驱动设计的指导原则_语言 & 开发_Jan Stenberg_InfoQ精选文章