领域驱动设计(domain driven design)战略篇之一 战略 & Bounded Context

之前的文章主要从战术层面的角度介绍了ddd。在岛国也被称为轻量级ddd。它提供了一些概念如aggregate, entity, domain event和一些设计模式如repository, specification来帮助我们建模和设计。各种战术还有能够扩展的地方,有机会还会再写下去。不过从这篇文章开始会写一写ddd战略方面的知识。

战略 vs 战术

究竟什么是战略与战术?他们有什么区别?
目测这两个词都来源于战争(自己的理解),战术是偏微观的策略,目的是取得某场战斗或者战役的胜利。诱敌深入,敌进我退之类的可能都属于战术吧。而战略是偏宏观的策略,目的是赢得一场战争,它所关注的不限于军事方面,可能资源的调配,甚至会牵涉到外交等。
扯远了~在领域驱动设计[domain driven design]中战术与战略的概念亦是如此。战术是微观层面的。在之前的文章中的例子中,基本都是为了解决某个十分具体问题而进行的模型设计。这些设计会反应具体的细节。比如一个如何去识别一个entity,一个entity会有什么样的行为。而这些设计会直接反映到我们的代码上。

为什么需要战略

从很抽象的概念上来说,我们应该不难理解为什么我们需要战略。战略与战术他们需要解决的是不同层面的问题。当我们谈宏观问题时,自然是需要战略的。但话是这么说,什么从程序开发的角度来说,什么才是宏观问题?什么又是微观问题?这个好像很难用语言来具体地定义。
假设我们完全不考虑宏观问题。我们想象(想象…)一下只用ddd中介绍的战术知识来进行设计。如今互联网产品的行业可能比较现实的制造产品的方案会是,先做proto type,然后做mvp(minimum viable product 只包含核心功能的产品),然后在mvp的技术上进行后续开发。

mvp

当我们在开发mvp的阶段时,产品的需求可能相对简单。我们分析需求,业务逻辑,然后设计能够描述这些业务的模型。可能10个到20个左右的aggregate就能解决问题。画个简图来表示我们定义的aggregate和其中的entity, value object。
这里写图片描述
这个时候你的application层的application service可能不需要与很多aggregate交互。
这里写图片描述

产品进化

随着产品经理对产品的认识更加深入,我们需要追加更多的开发,为了应对新的需求,我们要调整现有的模型,也需要增加新的模型来应对。某个时点,我们可以能已经到达了像图中的一个状况。我们已经无法再在一张图中精确描述aggregate中的元素。
这里写图片描述
而此时,我们的application层的中的一些application service可能已经不得不与非常多的aggregate进行交互。
这里写图片描述
当appli

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值