ipom
2010-10-20 11:41
看了LZ的这三篇初步认识,收获颇大

SpeedVan
2010-10-20 13:25
2010年10月19日 00:41 "flyzb"的内容
现在的SOA、ESB之类的东西是不是就像打造一个企业的“神经脉络”,而“OO”是不是就像“神经元”,它们之间的通讯就是靠生物电脉冲,这就是消息驱动。 ...

这比喻有一点问题,“‘OO’是不是就像‘神经元’”,OO作为一种思维怎么却成为了SOA、ESB等架构和技术的组件?作为“神经元”,我觉得更应该是“类”、“技术”、“内嵌架构”等一些具体的内在的东西。而反过来OO应该对应着生物界或者经脉界的世界观(例如对一般人而言只知道神经,但没有神经元等认识,或者在其他世界观中,神经已不再是神经,例如不是OO的话,对象就不是对象)。嘛,只是对这比喻分析一下而已。

回正题,比较同意 xmuzyu ,在DDD中对设计依然很模糊,因为缺少针对业务的具体分配的准则,但业务的分配通常就是我们设计的一个难点,也是一直以来,最头痛的地方(看看贫血和充血模型争了多久)。其实以前banq已经说了,分析与设计,而我们学了很多设计,却缺少了一种科学的分析所支持。而分析很多人都自成一套,有些很不规范,有些很不科学,有些甚至不可取。而四色和DCI的确一套不错的分析与设计方案。

回过头来看DDD,本人感觉它更多的是带我们进入领域世界,让我们认清领域模型就是现实模型的直接映射,不应该被入侵和破坏。同时为了创造出一个纯领域环境,也给出了设计方案。

flyzb
2010-10-20 15:22
    在上一个帖子里,我强调了——"领域驱动设计" = “问题域模型驱动领域建模” + “领域建模驱动软件实现”。其中我认为“问题域模型驱动领域建模”比“领域建模驱动软件实现”更重要。可是从大家的回复看,强调后者的居多,也就是重视技术研究的居多,重视业务研究的少。说实话,IBM、微软之类的技术实力很强,但为什么没有一个通吃的企业管理软件,就是企业业务太复杂多变了。

    关于水平分割和垂直分割的问题,我想有过大项目和业务集成经验的人都能明白。水平分割就是分层,而垂直分割是按照不同领域做的业务组件分割(可以看看IBM的CBM的资料)。

    关于“神经脉络和神经元”只是一种比喻,我还没有想以此提升到理论的高度,只是想表达以一种“自然观”去审视各种建模技术。不要被各种技术名词所诱惑,需要掌握的是各种建模技术的问题领域,这才是“领域驱动设计”的真谛。

    我和banq不同。banq是布道者,希望通过各种技术的介绍让大家迈入领域设计的大门;我是实战者,各种技术只是用了就忘掉的工具,心中只有一个属于我自己的企业领域模型。

[该贴被flyzb于2010-10-20 15:24修改过]

xmuzyu
2010-10-20 16:00
2010年10月20日 15:22 "flyzb"的内容
我和banq不同。banq是布道者,希望通过各种技术的介绍让大家迈入领域设计的大门;我是实战者,各种技术只是用了就忘掉的工具,心中只有一个属于我自己的企业领域模型。 ...

你好,请问你在实战中采用什么样的建模技术手段来实现领域模型,其实领域驱动设计不仅告诉我们软件的问题域的重要性,同时也提供了一种分析领域的技术方法论,但是目前我觉得只是按照领域驱动设计那本书的实体,值对象,领域服务,聚合,仓库这些概念不够,比如什么样子的行为属于实体,聚合跟,什么样子的行为属于领域服务,如何界定,如何去划分,这个有时候很难把握,这也许就是建模艺术性的体现吧,不能以对错来区分,只能通过不断的重构,优化使其更加接近领域实质。

PS:最后还请flyzb分享一下,你在实战过程中采用的建模技术,比如怎么判断逻辑属于实体,还是领域服务?还有领域服务和四色原型中的角色以及MI模型的联系等,我目前觉得思想原型中的角色概念很重要,它是逻辑的拥有者,而具体逻辑的实现者应该是MI去实现,实现的过程中MI也许还会包含MI-detail。

SpeedVan
2010-10-20 16:15
先谢了CBM介绍,刚入道的我很需要对这方面的知识面扩展,否则很难交流。

其实大家都很注重建模的,因为建模的合理性和科学性,直接影响软件灵活性和扩展性。而四色是一种对模型的分析方法,DCI是则是一种设计方法。建模必须经过分析和设计的,模型是变化的,所以我们需要自己认为一种比较好的分析和设计方法来指导建模。

而你所说的可能是如何去获取领域模型(也就是客观世界的应用领域,应用边界),这是领域专家所需要的技能。但这方面是需要对一个领域不断积累的,不是一朝一夕的事,但实现的思想和技术可以更快掌握。在掌握一套能实现成品的技术后,去积累不是更好?当然同时更好,但现实不允许(工作需要,我们不是freelancher)。所以为什么这里讨论得更多的是实现。而讨论获取的领域则需要指定是那方面的领域,然后再让这方面专业的领域专家再讨论(一般就是用例图,涉及类的就进入实现了)。(如:借贷,财务等领域不是一般人所能分析得到的,当然一个领域专家所认识的不止一个领域的)只是考虑领域,不考虑实现的话,就像MVC一样,在实现时就会迷惘和困难。

[该贴被SpeedVan于2010-10-20 16:19修改过]

[该贴被SpeedVan于2010-10-20 16:58修改过]

猜你喜欢