《实现领域驱动设计》 (美)弗农著 1章 DDD入门

**领域驱动设计(DDD)**作为一种软件开发方法,可以帮助我们设计高质量的软件模型。

什么是领域模型?

领域模型是关于某个特定业务领域的软件模型。通常,领域模型通过对象模型来实现,这些对象同时包含了数据和行为,并且表达了准确的业务含义。

贫血症和失忆症

贫血领域对象它描述的是一个缺少内在行为的领域对象。

在这里插入图片描述贫血模型对你的模型做了什么
贫血领域模型对象的示例代码:
在这里插入图片描述我们并不知道saveCustomer()方法的业务场景,为什么开始会创建这个方法?也许开始有人知道它的本意,但是过几周和几个月后呢?看看该方法的下一个版本
在这里插入图片描述很多参数都是可选的,那我们该如何测试这段代码以保证在业务场景下正确。

上面的saveCustomer()至少存在三大问题:
1.saveCustomer()业务意图不明确;
2.方法本身实现太复杂;
3.customer领域对象根本就不是对象,而只是一个数据持有器;
我们将这种情况称为”由贫血症导致的失忆症“。

限界上下文
可以看成是整个应用程序之内的一个概念性边界。整个边界之内的每种领域术语、词组或句子–也即通用语言,都有确定的上下文含义。在边界之外,这些术语可能表示不同的意思。

通用语言:
通用语言是团队共享的语言。领域专家和开发者使用相同的通用语言进行交流。
在这里插入图片描述只有团队的交流和代码才能持续到最后。

有了以上认识,我们便可以重新设计saveCustomer()。
在这里插入图片描述对领域模型的修改也将导致对应应用层的修改。每一个应用层的方法都对应着一个单一的用例流:
在这里插入图片描述
如果我们只对领域模型提供getter和setter会怎么样?结果我们只在创建纯数据模型。看看下面两个例子。我们需要将一个待定项(backlog item)提交到冲刺(sprint)中去。
第一个例子
在这里插入图片描述第二个例子
在这里插入图片描述第二个例子中,客户代码并不需要知道提交backlogItem的实现细节,代码所表达的逻辑恰好能够描述业务行为。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值