对领域驱动设计的初步认识(九)

10-12-16 flyzb
1.客观主体(例如“企业”)具有业务;

2.领域属于某个客观主体的具有一定边界的业务。

3.从领域抽象出模型。

上面应该是共识,但我感觉仍然有问题没有弄清楚。

1.客观主体和领域的关系?

2.客观主体和领域的对应关系:一对一或者一对多?

3.领域和模型的对应关系:一对一或者一对多?

4.究竟是领域相互独立还是模型相互独立?

5.是业务变更了,还是领域不稳定?

6.领域边界的稳定和模型的关系?

[该贴被flyzb于2010-12-16 21:57修改过]

         

3
flyzb
2010-12-16 22:58
我总结并反思了一下,谈一下我的答案。

  1.领域是具有一定边界的业务,这个边界是靠人来辨识的,所以领域是有一定主观色彩的客观存在。

  2.既然领域有边界,那么一个客观主体自然会有多个业务领域,它们是一对多的关系。

  3.我们常用知识来描述领域,这种知识分析抽象的结果就是模型。由于这种认识有其客观性,也有主观性,所以领域专家十分重要。我在企业里做软件往往要当半个领域专家,尤其是从信息化地角度看业务。领域和模型可能是一对多的,但应该尽量地少。

  4.按理说领域应该是相互独立,其对应的模型也相互对立,这是理想情况。可现实却不是这样,因为我们在做业务分析时往往由于自身对领域知识认识不够而根本就没有划分清楚。以jivejdon中Account对象为例,如果严格按照领域划分的话应该切成2个域:一个是纯粹的Account对象,不包含任何jive的信息,在企业里我们知道这属于HR的部分;另一个是AccountInJive,表示Account对象在Jive的专属信息。呵呵,banq,在这里我有点鸡蛋里挑骨头,因为这种情况在小项目里太多了,因为小项目里人们很难看清楚这点,也有因为是小项目而不愿意花费力气。另外banq在DDD的ppt里的那个订单和订单传送方式的例子也一直让我印象深刻。

  5.其实业务或者领域是否稳定不是关键,对我们最有意义的是如何保持模型的相对稳定,尽可能通过模型的可配置性或者组装性来适应业务的变化。应该说DDD已经给我们指出了一套比较好的建模技术,但还不够完善。对于目前DDD技术,我的感觉还是比较“刚性”,我尤其感觉DDD的聚合在形式上比较僵化。

  6.其实领域边界是稳定的,理想情况下业务变更了应该加入新的模型即可。然而由于我们往往对业务领域边界认识不清楚,所以“不是边界不稳定而是我们根本就没有分清楚边界”,比如上面的Account例子。领域边界的不清晰,导致模型边界不清晰,这样业务变化了,软件自然就扩展性不好。所以在我前面的帖子就提到,做好领域研究非常重要,甚至超过技术本身。就算是领域专家有很多也是伪专家,往往知其然而不知其所以然,同样一个业务在不同企业的表现也是不同的。SOA为什么难做,其实根本上不是技术层面的,而是业务领域层面的。

[该贴被flyzb于2010-12-16 23:29修改过]

jdon007
2010-12-16 23:09
你这么问,感觉这些熟悉的词一下子又变得陌生起来。有点不知道从哪里说起的感觉,先打个比方圆圆场。

一部电影 = 一种业务

这部电影的一个片段 = 这种业务的一个场景

这部电影的一个演员 = 参与这种业务的一个实体

这部电影的所有演员 = 参与这种业务的所有实体

“领域模型”这个词根据上下文不同,有时候是集合的概念,有时是个体的概念。为了避免产生误解或歧义,这里我用“实体”来承担表达个体概念的部分,这样说到“领域模型”时就是一个集合的概念了。

那么这个比喻中的领域是什么,答案是“电影”。这个电影不是表示具体某部电影的概念,表示的是“电影领域”的概念。

现在尝试回答flyzb的问题。

3) 领域与模型的关系?

这个问题就是在问“电影领域”与“演员”的关系?答案很明显,“电影领域”有很多个(种)“演员”,“领域”有很多个(种)“模型”。

4)领域是一个整体的概念,可以根据需要划分多个“子领域”,比如“武侠电影”、“科幻电影”,它们相对独立,但也可能结合(如“科幻武侠电影”),因为他们都是电影。“模型”是“演员”,演员之间相对独立。

5)“领域”是刻画的是“电影”共性,“业务”是具体的一部部“电影”。

6)随着“电影”(领域)的不断发展,需要新类型的“演员”(模型),反之,新类型的“演员”(模型),可能会发展“电影”(领域)。

第1、2问题,客观主体的主观认识即“模型”(演员),所以我理解为还是在问“模型”(演员)与“领域”(电影)的关系。

[该贴被jdon007于2010-12-16 23:15修改过]

flyzb
2010-12-16 23:22
To jdon007

这里不是玩文字游戏,而是基于我们的项目经验和遇到的问题结合DDD在做反思,希望你先去看看DDD,你至少先可以从infoq.com上下一个《领域驱动设计精简版》的pdf看看。

xuzhh
2010-12-17 09:17
2010年12月16日 22:58 "flyzb"的内容
另外banq在DDD的ppt里 ...

是公开的 么?在哪儿可以下载?

猜你喜欢
5Go 1 2 3 4 ... 5 下一页