【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

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

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

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

关注

评论

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

IDEA 敏捷开发技巧——实时模版

程序员小航

IDEA IntelliJ IDEA

springboot 2.4.0 knife4j 3.0.1接口文档框架

黄敏

springboot SpringBoot 2 Knife4j

正则表达式.02 - 量词与贪婪

insight

正则表达式 3月日更

SpringBoot启用HTTPS

黄敏

jdk https openssh springboot

《撬动星球的头部效应-绝非偶然》读书笔记

SilentMacUser

极客时间 读书笔记 产品经理 知识星球 极客大学产品经理训练营

需要深入的技术领域,方向正确是成功的关键

杨明越

程序员之禅(五)十条准则

每天读本书

读书笔记 每天读本书

Java安装教程

Sakura

28天写作 3月日更

如何让别人访问到你的本地项目? Ngrok免费实现内网穿透

xiezhr

ngrok 内网穿透 3月日更

学大数据应该怎么入门--大数据学习之路

大数据技术指南

大数据 3月日更

超干货 (实战经验)结合公司业务分析离线数仓建设实践

五分钟学大数据

大数据 数据仓库 28天写作 3月日更

翻译:《实用的Python编程》04_01_Class

codists

Python

浅淡python中with的用法,上下文管理器

极客新人

旧区块链思维面临淘汰

CECBC

区块链

《精通比特币》学习笔记(第三章)

棉花糖

区块链 学习 3月日更

HBase分布式部署

Fong

大数据 运维 部署

开课啦基于 dubbo-go 的服务端技术升级实战

apache/dubbo-go

微服务 云原生 dubbo dubbo-go dubbogo

使用Android版VMware Horizon Client连接到云桌面

梅花鹿鹿

微服务实践之分布式定时任务

万俊峰Kevin

微服务 定时任务 延迟任务 Go 语言

产品经理是个很务虚的岗位吗?

涛哥 数字产品和业务架构

产品经理

35万一枚的比特币,家里电脑想挖一枚要多长时间?答案只有3个字

CECBC

比特币

工具软件与开源

行人23

开源 SaaS

Linux时间同步-NTP服务器

黄敏

Linux ntp

Dubbo 进行一次微服务调用的时序图

跳蚤

中台建设落地浅谈

Man

中台 数字化转型

加快推进数据确权与资产化 发挥区块链技术信用机制优势

CECBC

区块链

能源区块链研究|中国内蒙古自治区为减少能源消耗 禁止比特币采矿

CECBC

比特币

JVM笔记 -- JVM的发展以及基于栈的指令集架构

秦怀杂货店

JVM JVM笔记

浅谈微服务架构

跳蚤

Hbase详解

Fong

大数据 运维 概念

Centos7 systemctl 启动Java应用

黄敏

Java Linux Centos 7 部署

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