对领域驱动设计的初步认识(十)
前面的帖子很绕,我反思了一下,基本赞同banq关于“业务领域”和“领域模型”的说法。好了,DDD锵锵三人行继续开会。
我在百度百科上查了一下关于“领域”的定义:
|
从上可以看出,这与banq说“业务领域就是边界”基本相同。不过我还是提出疑问,为什么业务领域会有边界呢?如何确定边界的大小呢?那就是领域模型,那我们再看看领域模型的定义:
|
领域模型是领域核心,是决定领域边界的关键。不过我感觉领域模型有内涵和外延之分。上面关于领域模型的定义,我感觉更多说的属于外延部分。因为业务是变化的,那么领域模型也会发生变化,关键是我们要掌握驱动业务变化的核心,即驱动领域模型变化的核心。
以jivejdon为例,其业务领域是"人与人之间的思想交流",其领域模型的核心是"如何让人与人之间能够便捷地进行思想交流",其领域模型的功能(外在表现)为"发表观点(发帖)、发表评论(回复)、热点订阅"等等。为什么我特意把领域模型分解为核心和功能两个部分,就是强调在做领域建模的时候要能够在不同场景下判断出领域模型会出现什么不同的变化。只呆过一个企业的领域专家不是真正的领域专家,只有在不同的企业里分析同一个业务才能更清醒地抓住业务的本质。
在上个帖子里,我提到了"客观主体",banq不太理解。其实在IBM的CBM(业务组件模型)理论中,一个业务组件(CBM)包含三个维度:业务能力、组织和流程。我说的"客观主体",也可以说是业务主体,指的就是人或者组织。这和DCI中的角色是不是一层面的东西。如果想做企业信息化规划(最值钱的东西,可是国人不认),必须对企业人或组织有深入的研究。呵呵,IBM实施CBM是很贵的,随便一下绝不少于百万的。其实CBM属于宏观层面的业务建模,而DDD属于领域层面的建模。
关于那个Acount的问题,banq还是没明白我的意思,那我进一步说明一下。假如领导让我先开发了一个jivejdon系统,又让另外一个人开发了一个微博系统,可是后来领导希望我们把2个系统整合到一个系统,会遇到如下业务集成的问题:
jivejdon里有一个account,代码如下:
|
同样在那个微博里还有一个Account对象
|
那么大家可以思考一下该如何整合这两个系统?整合的结果又说明了什么?
注:也许有人对我为什么对业务、领域、模型这么简单的几个东西,反反复复说来说去,认为这些就是天经地义的东西。在对于如何对十分复杂的企业业务建模的过程中,我发现就是这么几个看起来简单的东西是困扰我抓住业务本质的障碍,就好像在探寻“1+1”的问题一样。我坚信"简单的背后不简单".
[该贴被flyzb于2010-12-18 10:20修改过]