写点什么

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

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

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

关注

评论

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

从零开始学习3D可视化之爆炸图

ThingJS数字孪生引擎

科技 3D 3D可视化

程序员上班“划水”向阿里猛投简历,两次被刷后,终成“菜鸟”P6

Java 程序员 架构 面试

2021年,Java开发者值得学习的13项技能

百度开发者中心

Java

为什么中间件协议对区块链生态系统至关重要?

CECBC

[译] R8 优化: Staticization

Antway

6月日更

浪潮云入选中国网络安全百强综合实力领军者象限

云计算

超详细!百度富媒体检索比对系统的关键技术

百度开发者中心

百度

5分钟速读之Rust权威指南(二十四)Box

wzx

rust

SpringCloud Gateway 路由转发性能优化

中原银行

微服务 性能优化 SpringCloud Gateway 中原银行

为了不写接口文档,我肝了个 IDEA 插件!

程序员小航

Java IDEA idea插件 YAPI 文档

停车场事故频频,AI 达人将摄像头变身安全卫士

阿里云CloudImagine

阿里云 计算机视觉 音视频 应用 英特尔

爆场预警!百度大脑开放日-AI赋能软硬件产品创新

百度大脑

百度大脑开放日

成为一个面霸需要面试多少回?

escray

极客时间 6月日更

校外培训行业迎来强监管,“教育+区块链”新模式试图解决行业痼疾

CECBC

Nebula 基于 ElasticSearch 的全文搜索引擎的文本搜索

NebulaGraph

elasticsearch 索引 图数据库

优雅编程 | 7 个你应该掌握的 JavaScript 编码技巧

devpoint

JavaScrip 6月日更

微博、快手纷纷整治饭圈乱象:抵制不良饭圈风气是全网的责任

石头IT视角

GitOps系列二|如何借助极狐GitLab 和Terraform以代码形式构建基础设施?

极狐GitLab

kubernete

作为一名程序员如何开展自己的副业呢?

Changing Lin

话题讨论 6月日更

阿里JAVA架构师面试136题含答案:JVM+spring+分布式+并发编程!

Java 程序员 架构 面试

Cocos 大表姐:所有技术的本质都是数学问题丨ECUG Meetup 讲师专访

七牛云

音视频 游戏开发 Cocos Meetup

让开发更丝滑,KodeRover开源分布式持续交付项目Zadig | TGO喜报

花花

试用期 签约计划

【 Meetup 推荐】6月26日,邀请您相聚西子湖畔,探讨 2021 音视频技术最佳实践

七牛云

音视频 直播 RTC Meetup

只等你来!OpenAtom XuperChain开发者夏季论坛来啦

百度开发者中心

百度 开源 开发者

数字人民币是央行数字货币还是法定数字货币?

CECBC

openEuler开源之后:引领新的技术变革

花花

试用期 签约计划

为什么智能作业灯突然成为教育行业的趋势?

anyRTC开发者

音视频 WebRTC 智能硬件

Flink EventTime 和 Watermark

Alex🐒

flink 翻译 flink1.13

能否借鉴鸿蒙思路实现物联网燃气泄露监控?

老猿Python

鸿蒙 物联网 北向接口 远程监控

建党100周年,快来预约博睿数据驻场服务!

博睿数据

SpringCloud Gateway 路由数量对性能的影响研究

中原银行

微服务 SpringCloud Gateway JMH性能基准测试 中原银行

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