随笔分类 - DDD
摘要:将实体和值对象在一致性边界之内组成聚合乍看起来是一件轻松的任务,但在DDD众多的战术性指导中,该模式却是最不容易理解的。 让我们首先来看看一些常见的问题。聚合只是将一些共享父类、密切相关联的对象聚集成一个对象树吗?如果是这样,对于存在于这个树中的对象有没有一个实用的数目限制?既然一个聚合可以引用另一
阅读全文
摘要:通过模块完成设计 在DDD中,模型中的模块表示了一个命名的容器,用于存放领域中内聚在一起的类。将类放在不同模块中的目的在于达到松耦合性。在DDD中的模块并不是一个通用的存储区域,因此对其进行适当的命名是重要的。事实上,模块名是通用语言的重要组成部分。 在设计模块时,有几条简单的原则: 我们应该将模块
阅读全文
摘要:领域中的服务表示一个无状态的操作,它用于实现特定与某个领域的任务。当某个操作不适合放在聚合和值对象上时,最好的方式便是使用领域服务了。有时我们倾向于使用聚合根上的静态方法来实现这些操作,但是在DDD中,这是一种坏味道。 我们应该尽量避免在聚合中使用资源库。 什么是领域服务(首先,什么不是领域服务)
阅读全文
摘要:值对象虽然经常被掩盖在实体的阴影之下,但它却是非常重要的DDD部件。值对象的常见例子包括数字,比如3、10和29.51;或者文本字符串,比如“hello world”;或者日期、时间;还有更加详细的对象,比如某人的全名,其中包含姓氏、名字和头衔;再比如货币、颜色、电话号码和邮寄地址等。当然还有更加复
阅读全文
摘要:开发者趋向于将关注点放在数据上,而不是领域上。这对于DDD新手来说也是如此,因为在软件开发中,数据库依然占据着主导地位。我们首先考虑的是数据的属性(对应数据库的列)和关联关系(外键关联),而不是富有行为的领域概念。这样做的结果是将数据模型直接反映在对象模型上,导致那些表示领域模型的实体包含了大量的g
阅读全文
摘要:DDD的一大好处便是它并不需要使用特定的架构。由于核心域位于限界上下文中,我们可以在整个系统中使用多种风格的架构。有些架构包围着领域模型,能够全局性地影响系统,而有些架构则满足了某些特定的需求。我们的目标是选择合适于自己的架构和架构模式。 在选择架构风格和架构模式时,我们应该将软件质量考虑在内,而同
阅读全文
摘要:一个项目的上下文映射图可以用方式来表示。比较容易的一种是画一个简单的框图表示两个或多个限界上下文之间的映射关系。该框图表示了不同的限界上下文在解决方案空间中是如何通过集成相互关联的。另一种更详细的方式是通过限界上下文集成的源代码实现来表示。 上下文映射图为什么重要 上下文映射图主要帮助我们从解决方案
阅读全文
摘要:总览 从广义上讲,领域(Domain)即是一个组织所做的事情以及其中所包含的一切。商业机构通常会确定一个市场,然后在这个市场中销售产品和服务。每个组织都有它自己的业务范围和做事方式。这个业务范围以及在其中所进行的活动便是领域。当你为某个组织开发软件时,你面对的便是这个组织的领域。这个领域对于你来说应
阅读全文
摘要:设计不只是感观,设计就是产品的工作方式。 我们的目标应该是创造一个可观测的、可伸缩的、组织良好的软件模型。 DDD同时提供了战略上的战术上的建模工具。 我能DDD吗? DDD首先并不是关于技术的,而是关于讨论、聆听、理解、发现和业务价值的,而这些都是为了将知识集中起来。如果你了解公司的业务,那么你至
阅读全文
摘要:随着系统的增长,它会变得越来越复杂,当我们无法通过分析对象来理解系统的时候,就需要掌握一些操纵和理解大模型的技术了。本文将介绍一些原则。遵循这些原则,就可以对非常复杂的领域进行建模。大部分这样的决策都需要由团队来制定,甚至需要多个团队共同协商制定。这些决策往往是把设计和策略综合到一起的结果。 最负雄
阅读全文
摘要:上部分模型驱动设计的构造块为维护模型和实现之间的关系打下了基础。在开发过程中使用一系列成熟的基本构造块并运用一致的语言,能够使开发工作更加清晰而有条理。 我们面临的真正挑战是找到深层次的模型,这个模型不但能够捕捉到领域专家的微妙的关注点,还可以驱动切实可行的设计。我们的最终目的是开发出能够捕捉到领域
阅读全文
摘要:3. 领域对象的生命周期 每个对象都有生命周期,如下图所示。对象自创建后,可能会经历各种不同的状态,直至最终消亡——要么存档,要么删除。当然很多对象是简单的临时对象,仅通过调用构造函数来创建,用来做一些计算,然后由垃圾收集器回收。这类对象没必要搞得那么复杂。但有些对象具有更长的生命周期,其中一部分时
阅读全文
摘要:为了保证软件实践得简洁并且与模型保持一致,不管实际情况如何复杂,必须运用建模和设计的实践。 某些设计决策能够使模型和程序紧密结合在一起,互相促进对方的效用。这种结合要求我们注意每个元素的细节,对细节问题的精雕细琢能够打造一个稳定的平台。 本部分主要将一些模式,说明细微的模型差别和设计决策如何影响领域
阅读全文
摘要:模型被用来描述人们所关注的现实或想法的某个方面。模型是一种简化。它是对现实的解释 —— 把与解决问题密切相关的方面抽象出来,而忽略无关的细节。 每个软件程序是为了执行用户的某项活动,或是满足客户的某种需求。这些用户应用软件的问题区域就是软件的领域。 一些领域涉及物质世界,例如,机票预定程序的领域中包
阅读全文