写点什么

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

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

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

关注

评论

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

分享:数据库存储与索引技术(三)LSM树实现案例

OceanBase 数据库

数据库 oceanbase

OpenHarmony关系型数据库查询结果呈现

白晓明

关系型数据库 数据库查询 OpenHarmony

Gogs/Gitea 环境搭建

流火

git gogs Gitea

低代码起势,开发者可以早日脱离996了?

引迈信息

程序员 前端 低代码 996

Activity初学乍练

芯动大师

android 活动 Activity

JVM 的 noverify 启动参数

HoneyMoose

从质量思维到用户思维

老张

质量保障 用户思维

Tapdata 赋能敏捷转型:头部知识付费应用如何搭载实时数据快速提升人效,创造业务增长点

tapdata

数据库

MobTech|什么是SDK

MobTech袤博科技

天津市人工智能计算中心揭牌 天下津梁融汇AI之力

脑极体

算力

Groovy关键字def

FunTester

干货|10个C4D必备插件,让工作事半功倍

Finovy Cloud

C4D 3ds Max

智能公厕应用人工智能技术,实现智慧化管理与服务

光明源智慧厕所

智慧城市

2023最新最全Java面试速成指南,面试骚操作都在里面了

程序员小毕

程序员 后端 高并发 架构师 java面试

B站容量管理:游戏赛事等大型活动资源如何快速提升10+倍?

TakinTalks稳定性社区

运维训练营第20周作业

好吃不贵

跟GPT学k8s-Kubernetes-native load balancer options

jupiter

快来看HarmonyOS 3新动作!华为畅享10S等24款设备启动花粉Beta招募

最新动态

DeepL:慢公司的快速扩张之路

CnosDB

DeepL 时序数据库 开源社区 CnosDB

Surfire 单元测试添加 jvm参数

HoneyMoose

借助 mperf 进行矩阵乘法极致优化

MegEngineBot

开源 性能优化 MegEngine

Dubbo 就近路由

昵称不能为null

dubbo 路由

OpenKruise 成为 CNCF 孵化项目:为大规模采用 Kubernetes 打开大门

阿里巴巴云原生

阿里云 开源 云原生 OpenKruise cncf

vika维格表 x 阿里云计算巢:SaaS 云端私有化部署,助力企业数字化转型

云布道师

计算巢

Go如何自动解压缩包?如何读取docx/doc文件内容?

王中阳Go

Go 高效工作 学习方法 文件处理 压缩

用AI回忆起曾被忘却的语言

脑极体

AI

Koordinator 助力 ACK 容器调度升级,提升应用性能,节约资源成本

阿里巴巴云原生

阿里云 容器 云原生 Koordinator

尚硅谷数据湖Iceberg视频教程发布

小谷哥

如何在容器服务 ACK 玩转 MSE Ingress

阿里巴巴云原生

阿里云 容器 微服务 云原生

国网信通产业集团*IoTDB | 三平台管理百亿级累计数据,构建端边云全周期电力数据高效解决方案

Apache IoTDB

IoTDB 国产时序数据库

使用 Alluxio 优化 EMR 上 Flink Join

亚马逊云科技 (Amazon Web Services)

人工智能

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