AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

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

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

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

关注

评论

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

CentOS 系统常用命令详解

霍格沃兹测试开发学社

预测分析中的场景管理,适应不断变化的市场环境

智达方通

企业管理 全面预算管理 财务管理 预算预测分析 场景管理

淘宝商品详情API接口:全面解析商品属性与数据

技术冰糖葫芦

api 货币化 API 接口 API 文档 API】 pinduoduo API

Flink 作业管理器:核心功能、角色与责任详解

木南曌

flink 实时计算

TapData + 实时数仓:实时数据如何赋能船舶制造业,助力数字化应用升级和科学管理运营

tapdata

大数据 实时数仓场景实践

EMQX Platform 产品发布会回顾:全球部署与无缝数据集成,驱动汽车行业智能化转型

EMQ映云科技

mqtt mqtt broker

高可用 - 隔离原则

京东科技开发者

流水线运行出错排查难?AI 来帮你

阿里云云效

阿里云 云原生 云效

企业未来都会用上云原生开发工具吗?它有什么优势

是但求其发

AI 云原生 K8s 多集群管理

Python 字符串格式化指南

霍格沃兹测试开发学社

如何在 Windows 上安装 SQL Server,保姆级教程来了!

霍格沃兹测试开发学社

ETL中元数据处理的方式

RestCloud

数据处理 元数据 ETL 数据集成

淘宝/天猫按关键字搜索API:返回值详解,轻松获取商品信息

技术冰糖葫芦

api 货币化 API 接口 API 文档 API】 pinduoduo API

京东广告研发 —— 京东推荐广告排序机制演化

京东科技开发者

软件测试学习笔记丨Selenium执行JavaScript脚本

测试人

JavaScript 软件测试 自动化测试 测试开发

企业规模扩大,SD-WAN实现跨省快速组网

Ogcloud

网络协议 网络加速 SD-WAN 企业组网 SD-WAN组网

Python 中删除文件夹下文件的方法详解

霍格沃兹测试开发学社

淘宝/天猫API接口:轻松获取商品详情原数据

技术冰糖葫芦

​腾讯云异构计算平台全面支持Llama 3,助力一键部署、性能翻倍

极客天地

助力数智化转型:使用检索增强生成【RAG】构建物业行业大模型

智在碧得

深度学习算法 AI大语言模型 大语言模型 人工智能深度学习 #大模型

管理者如何在团队里讨论敏感话题

伤感汤姆布利柏

流水线运行出错排查难?AI 来帮你

阿里巴巴云原生

阿里云 云原生 云效

用海外云手机做tiktok怎样保障安全性?

Ogcloud

云手机 海外云手机 tiktok云手机 国外云手机 tiktok运营

使用 Dockerfile 构建和定制 Docker 镜像

霍格沃兹测试开发学社

如何在 Windows 上安装 SQL Server,保姆级教程来了!

霍格沃兹测试开发学社

如何通过代理服务器加速您的网站浏览体验

摘星星的猫

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