领域划分

1什么是领域

领域是相似度很高的N个实体聚集,从而组成的知识、影响或活动范围

2划分领域/模块好处

很多大型软件软件之所以能做到几百,上千人有条不紊的开发,不仅是个人能力,也归功于模块化做的好,不同的模块之间通过API来进行通信,每个模块之间的耦合很小,每个小团队聚焦于一个独立的高内聚模块来开发,最终像搭积木一样将各个模块组装起来,构建一个

超级复杂的系统,就像我经常和你们说的乐高。

我们再聚焦到代码层面,合理的划分模块能有效地解耦代码,提高代码的可读性和可维护性。

3如何划分领域

我所知道的,划分领域能够自上而下的划分,不仅需要在这些相关联的领域有着极其丰富的经验,脑海中有着清晰且成熟的领域模型图。

而自下而上,也就是本文所讲的,主要思想是从需求出发,划分出实体后,对实体进行归类,最终提炼出领域。

1)对需求进行充分分析,提炼通用语言,从通用语言中抽象出实体

我们首先对需求进行充分分析,提炼通用语言,从通用语言中抽象出实体。这里主要讲的是划分领域的方法论,提炼通用语言的方法这里就先不在赘述。

2)按照职责相似度,对实体进行归类,抽象出领域

通过上面的步骤,我们得到了很多实体,然后按照职责的相似度对实体进行归类,相似度高的为一类,每一类给他们起一个名字,这就是领域。

比如说现在有实体:订单实体、订单明细实体、营销活动实体、营销工具实体,这四个实体都是电商行业的实体概念,从实体的名称上面,我们就可以看出,订单实体和订单明细实体职责相似度很高,主要是用来描述下单的结果,属于一种类型实体,而营销活动和营销工具实体,明显是另外一种类型实体,我们分别给两种类型实体取了一个名字,前者取名为交易域,后者取名为营销域。

一个实体只属于一个领域,如果实体属于多个领域,可能就需要思考下,这多个领域究竟是不是同一个域。

再反例比如说,电商行业有个东西叫做预售,举个预售的例子,小明今天下单预购买电视机,付定金 500 元,剩下尾款是需要在 10 天后支付,通过这种形式,商家提前锁定买家,买家也能得到一些优惠,那么就有一些同学针对这个业务提出了新的领域:预售域,主要理由就是预售在商品发布、商品详情、下单页、订单详情页面等多个地方,都有预售的影子,都有和预售相关的业务,所以预售也可以称作一个领域,这样对么?

很明显是不对的,预售我们只能称为一个下单场景,只不过这个场景在很多领域下都有设置一些值,比如规定了只有商品 A 才能参加预售,比如规定参加预售下单的订单详情页面不太一样,但我们无法从预售这个下单场景中,抽象出和预售职责相似度很高的实体,一个实体都无法抽象出来。

如果你把预售这样的场景称为领域,那么随着业务的发展,你会很恐怖地发现,你的域太多了,比如限购域、0 元商品域、阶段支付域,场景是无穷无尽的,你的领域也会无穷无尽。

所以我们划分领域的时候,最忌讳的就是以场景来划分领域,我们应该以业务对象聚合来划分领域。

4控制边界

1)边界

用细胞来形容限界上下文,因为细胞之所以存在,是因为细胞膜限定了什么在细胞内,什么在细胞外,并且确定了什么物质可以通过细胞膜。这里的细胞代表上下文,而细胞壁代表了包裹上下文的边界。

2)模块间得交互

将每个模块都当作独立的lib一样来开发,只提供封装了内部实现细节的接口给其他模块使

用。

补充:

对于划分得第一步可参考以下文章:

https://www.kancloud.cn/yunhua_lee/oobaodian/110894

自上而下法:

先抛结论,然后列出几点来支持自己的结论,再层层详细展开。

当自己心中对问题已有思路,就差清晰的表达出来时,适合用自上而下法。比如,写年终总结时,基本知道自己要写的主题是什么,平时的成绩、遇到的问题、下一年的规划等也有个大概构思,此时,就可以采用自上而下法构建金字塔结构,条理清晰的表明自己的想法。

自下而上法:

当自己心中,对于想要表达的内容,思绪还比较混乱时适合用自下而上的方法来构建金字塔。即:先归类分组,然后概括每组思想,最后提炼主题,完善整个思考过程。如果要成文,建议思考时可以自下而上,文章还是采用自上而下的方法写出来,比较直截了当,易于理解。

细节请阅读金字塔原理。

原文地址:https://www.cnblogs.com/liaohailong/p/12447320.html