@lsmn
2017-07-12T05:38:06.000000Z
字数 1216
阅读 2217
领域驱动设计
DDD
在使用DDD核心理念和实践作为软件设计和开发的指导方针时,可以概括为三个原则:捕获、嵌入、防护。这是Steven A. Lowe在今年的DDD交流大会上演讲时提出的。捕获领域模型。将模型嵌入代码。保护领域模型免受其他领域的侵蚀。
在使用领域驱动模型(DDD)核心理念和实践作为软件设计和开发的指导方针时,可以概括为三个原则:捕获、嵌入、防护。这是Steven A. Lowe在今年的DDD交流大会上演讲时提出的。为了采取积极的行动,我们通过掌握刚好够用的信息来捕获领域模型。我们将模型嵌入到代码和对话中。我们保护领域模型免受其他领域的侵蚀,尤其是技术领域。
在Thoughtworks首席顾问Lowe看来,DDD的出现是一种突破,因为它打破了对企业数据模型的错误沉迷,并代之以专注于合作领域的、独立但重叠的模型。他强调,DDD改变了软件开发的关注点和范围,从技术视角转向了以业务目标指导探索和解决方案。他认为,虽然人们对于DDD还存在一些误解,但他指出,那些都是错的:
捕获的目的是可视化领域的思维模型,让其具备交互性,从而使所有人都达成一致。在Lowe推荐的模型创建方法中,其中一种是把所有人都召集到一个房间里,让他们专注于领域活动。这项技术被称为事件风暴——一种由Alberto Brandolini创建的集体建模方法。Lowe发现,这种方法非常强大,可以最大化学习速度,最小化学习负担。
在将领域模型嵌入到代码时,两个重要的部分是命名和组合,前者可以反映领域意图,而后者可以反映领域行为。Lowe指出,如果你不能给一个东西起个好名字,则可能说明你对你要命名的东西不够了解。由于文档和图表都会过期,所以代码才是唯一可靠的事实来源。通过将领域模型嵌入到代码,就可以保证模型永远正确,而且对于开发人员随时可见。在更高层面上,领域专家也可以读懂代码。
为了保护领域模型免受侵蚀,我们使用边界将子领域隔离开。上下文的边界是其接口,即进进出出的命令和事件。但是,边界的强度也很重要,需要在接口中完成什么验证和转换?一种实用的方法是使用模块从物理上隔离子领域。这样做的好处包括,代码库耦合度更低,更有弹性。Lowe指出,争取在编码的第一时间避免技术债务比后续消除它更简单。
Lowe最后强调,捕获-嵌入-防护是一个迭代过程,会随着每个步骤重复多次,从较小的经过验证的模型逐步构建出一个领域模型。他还指出随时随地使用领域驱动设计的重要性;如果你不是有意对领域建模,那么你就不会无意中为其他东西建模。
查看英文原文: Capture - Embed - Protect, Guidelines for Domain-Driven Design