写点什么

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

  • 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:001767
用户头像

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

关注

评论

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

Kyligence 入选 Gartner® 2023 客户之声报告,高分获评“卓越表现者”

Kyligence

数据分析 指标平台

轻量级数据中台,大中型企业数字化转型首选

RestCloud

数据中台

Redis分布式锁问题分析与处理方案

郑在暴富中

redis redisson 分布式锁

玩转 Cgroup 系列之三:挑战手动管理 Cgroup

小猿姐

cpu 资源管理 Cgroup

跨境自建站卖家如何提高谷歌广告质量得分?

九凌网络

浅谈研发数字化在汽车之家的落地实践

之家技术

产品 数字化 研发 效能 释产能

Milvus 上新!全新 Range Search 功能,可精准控制搜索结果

Zilliz

Milvus Zilliz 向量数据库

一文带你了解TypeScript 函数

Aion

typescript Vue 前端

数据库操作入门:PyMongo 和 MongoDB 的基本用法

小万哥

Python 程序员 软件 后端 开发

能够导出源代码的低代码平台有哪些?

互联网工科生

低代码 源代码

低代码平台是什么?具备哪些特性?

树上有只程序猿

低代码

市场行情回暖、利好月来袭,Web3 广告业领头羊 Verasity 或迎爆发

鳄鱼视界

选人与育人,孰先孰后?

凌晞

团队管理

typhonjs-escomplex 代码可读性 & 可维护度探索

南城FE

JavaScript 前端开发 代码质量 代码规范

零代码秒集成打通小鹅通订单支付信息与CRM合同接口

RestCloud

零代码 APPlink

10w+播放!自动化办公,用到了哪些实用的Python技术?

程序员晚枫

Python 编程 自动化办公

深入理解Docker:一种革新的容器技术

不在线第一只蜗牛

Docker 容器化 容器化部署

利用生成式AI的产研流程:创新与效率的完美结合

之家技术

测试 用例 效能 生成式AI 释产能

Databend 与海外某电信签约:共创海外电信数据仓库新纪元

Databend

如何item_get-获得淘宝商品详情api接口

技术冰糖葫芦

API 接口

Kstry: 业务架构的首选之选

快乐非自愿限量之名

开发工具 业务框架

市场行情回暖、利好月来袭,Web3 广告业领头羊 Verasity 或迎爆发

威廉META

文心一言 VS 讯飞星火 VS chatgpt (135)-- 算法导论11.3 1题

福大大架构师每日一题

福大大架构师每日一题

使用AWS CodePipeline自动部署项目到EC2

王坤祥

亚马逊云 亚马逊云科技 EC2 CodePipeline CodeDeploy

高效使用 PyMongo 进行 MongoDB 查询和插入操作

小万哥

Python 程序员 软件 后端 开发

从混乱到优雅:基于DDD的六边形架构的代码翻新指南

不在线第一只蜗牛

架构 DDD 框架设计

做独立站需要用到的十大软件

九凌网络

X2RTC安装教程详解(图文版)

X2Rtc

开源 音视频 RTC 教程分享

inBuilder低代码平台新特性推荐-第七期

inBuilder低代码平台

低代码

多行业用户齐聚,2023 IoTDB 用户大会详细议程更新!

Apache IoTDB

推动OpenHarmony在AIDC行业落地,优博讯的技术积累与实践

Geek_2d6073

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