最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

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

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

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

关注

评论

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

【JVM】深入解读G1垃圾回收器

小明Java问道之路

并发 垃圾回收 GC G1垃圾回收器 9月月更

PLG SaaS 产品 Figma 商业模式拆解

程序员泥瓦匠

SaaS

在windows电脑上配置kubectl远程操作kubernetes

程序员欣宸

Kubernetes 9月月更

ScrumMaster可不是项目经理!

ShineScrum捷行

Scrum ScrumMaster 项目经理

OKR之剑·理念篇02: OKR布道之旅

vivo互联网技术

团队管理 OKR 目标管理

NGINX 的未来:回到开源的初心

NGINX开源社区

nginx Kubernetes nginx 开源版 NGINX Kubernetes Gateway NGINX Amplify

高并发之负载均衡

源字节1号

软件开发

Orbeon form 的安装和使用教程

Jerry Wang

typescript SAP Hybris form 9月月更

面对全新的编程语言,这些思路可以帮助你察觉漏洞

网络安全学海

黑客 网络安全 信息安全 渗透测试 漏洞利用

如何用AR Engine开发一个虚拟形象表情包?

HMS Core

AR

通过爬虫爬取一些图片

吉师职业混子

9月月更

2022-09-19:给定字符串 S and T,找出 S 中最短的(连续)子串 W ,使得 T 是 W 的 子序列 。 如果 S 中没有窗口可以包含 T 中的所有字符,返回空字符串 ““。 如果有不

福大大架构师每日一题

算法 rust 福大大

挑战30天学完Python:Day3夯实基础-布尔值和运算符

MegaQi

9月月更 挑战30天学完Python

Python语法之数据类型

二哈侠

Python 数据类型 9月月更

【JVM】深入解析G1的并发标记与三色标记

小明Java问道之路

GC 三色标记 G1垃圾回收器 9月月更 并发标记

Chrome操作指南——入门篇(七)console中的await和log

Augus

Chrome开发者工具 9月月更

行业方案|“机场”行业智能运维解决方案介绍

云智慧AIOps社区

解决方案 智能运维 运维管理 智能运维AIOps 监控安全

《简单记个笔记》之部分CSS选择器介绍

吉师职业混子

9月月更

史上最详细vue的入门基础

楠羽

Vue 笔记 9月月更

Qt|ListWidget控件总结

中国好公民st

List qt 9月月更

Chrome操作指南——入门篇(五)Snippets

Augus

Chrome开发者工具 9月月更

那些你不知道的炫酷按钮交互效果

南城FE

CSS 前端 动画 交互设计 按钮

MASA MAUI Plugin 安卓蓝牙低功耗(一)蓝牙扫描

MASA技术团队

.net MASA MAUI Xamarin

Python教程之Python简介

二哈侠

编程语言 9月月更 Python简介

Python 教程之变量

二哈侠

变量 9月月更 Python语法

[极致用户体验] 多页面应用里,「网页内返回」按钮,何时用 history.back 何时用 replaceState?

HullQin

CSS JavaScript html 前端 9月月更

Chrome操作指南——入门篇(六)console.injector

Augus

Chrome开发者工具 9月月更

本周预告:资深架构师解读多架构体系下的内核与系统开发等技术演讲 | 第47-48期

OpenAnolis小助手

开源 ebpf sig 龙蜥大讲堂 普华

Hinton等谈深度学习十年;PyTorch落地Linux基金会的影响;机器学习界的“GitHub”|AI系统前沿动态

OneFlow

人工智能

【字符串函数内功修炼】strlen + strstr + strtok + strerror(三)

Albert Edison

C语言 9月月更 strlen strstr strtok

Flomesh 多租户 Ingress Controller

Flomesh

Service Mesh 服务网格

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