对领域驱动设计的初步认识(五)
一边看着Evans的书,一边学习jivejdon源码,同时印证着我的经验和想法后有这样一种感觉:DDD就像一颗闪光的明珠,但从目前来讲还不够完美。
这不禁让我想到一个问题:随着各种新的建模技术出现,我们应该如何去把握?其实在论坛里也看到大家有时也会有很多迷惑,对各种建模技术名词不知道该如何去正确的区分和运用。当然,我自己也有。为了解决这个问题,我们应该知道真正的好的建模应该是个什么样子,以此来验证各种建模技术是否能够达到心中的目标。这就好像那些玄幻小说一样,每一本玄幻都有一套体系的设定,最终的境界都是一个“道”字,都会有明确的境界标准。
那对于我们做企业业务建模,终极目标应该是个什么样子呢?我认为这个终极目标一定是非常复杂的(也就是我原来常说的大项目场景),因为只有在复杂的场景下才能真正检验各种建模技术的偏颇。想想看,我们的建模目标应该向谁学习。论坛也有人说过,“自然的就是最好的”。是啊,经历过亿万年才进化出来的模型难道不值得我们学习吗,难道不是我们的目标模型吗!呵呵,答案已经呼之欲出了,就是“仿生物建模”。是的,没错,如果说利用我们的建模技术能够去构建出一个复杂的仿真人,具备人的一些特征和功能的话,那这种建模技术就是完美的。记得前面的帖子里,我总是提到大项目建模,有人认同,有人不以为然,还有人茫然。其实离我们最近的最熟悉的大项目就是“人体”,我们可以学着用学到的建模技术去“对人体建模”,去检验你的建模技术,这样我们会少一些迷茫。其实对于像DDD、EDA、DCI、CQRS等这些新技术,你都可以在人体奥秘中找到影子,可以通过人体本身的模型机制去验证这些技术的完备性,从而学会在实践中应该如何正确地去运用这些技术,另一方面也为这些技术的发展指明了方向。
对我前面几个帖子有一个总结:从层次上来讲,企业的业务建模可以分为两个层面,”宏观建模”和“微观建模”。“宏观建模”是指首先要对企业做一个整体的信息化规划,对企业进行整体的的业务架构建模,其成果就是业务组件。其中的方法论可以参照IBM的CBM,不过IBM好像也只是咨询,真正的落地还要靠自己对CBM的领悟。
Evans的DDD主要属于“微观建模”部分。对于“微观建模”,我认为分为2个方面:“结构化建模”和“行为建模”,这是一体两面。我觉得Evans对DDD总结了几个关键的要素:实体、值对象、聚合、工厂和存储,但其中还少了一个非常重要和关键的要素:“事件”。虽然banq在JF中引入了事件的设计,但我感觉还不够彻底。众所周知,人体是由很多细胞构成的,那细胞之间是如何作用的呢,其实就是“刺激”和“响应”。其中“刺激”就是“事件”,所以“事件”是业务模型本来就应该具备的要素,而不是什么技术层面的东西。从这点来看,JiveJdon中的用户发帖这个动作激发一个“发帖事件”,这个事件会导致一系列的对象和值对象的状态变化(关于jivejdon的疑问我会在后面的帖子详谈)。同时,我记得论坛里有道友对职责的划分产生疑问。那首先要明白什么是“职责”,从“事件”角度看,“职责的本质就是事件的响应”。这也就是为什么我说jivejdon对事件的运用做的不彻底的原因了。
“结构化建模”是指建模中除了静态的实体和值对象的结构关系外,从“事件”角度看,实体或者值对象还具备一些“本能的反应”,比如"手指会弯曲"。而“行为建模”是指通过神经中枢(消息总线)来控制不同对象的本能反应来完成一个复杂的组合,比如"用手弹钢琴"。
呵呵,先说这么多,下面的帖子我会结合jivejdon谈谈自己的疑问和想法。
[该贴被flyzb于2010-11-14 10:02修改过]