呵呵,banq见多识广,我不知道传统需求分析设计和敏捷开发,也没看过DDD这本书(是个软件开发的新手)。DDD给我的启示只有一点,就是提醒我“用领域语言思考领域问题”,剩下的就根据自己的常识和对技术的认识进一步思考了。
banq的总结的开发过程是实战经验出来的,肯定是有道理的。我这里从另一个角度,语言的转换角度来总结开发流程,希望是一种补充:
用户需求 =〉提炼领域语言 =〉使用领域语言描述领域的模型与活动 =〉将领域语言转换为OO语言(可以是别的语言) =〉 使用Web与DB语言支援OO语言的描述 =〉将OO、Web、DB这些技术语言转换为机器语言
每个转换翻译过程,可能需要分工,比如我们已经习惯了将OO、Web、DB这些技术语言转换为机器语言的工作交给编译器或解释器来做。而前面语言转换的若干过程,如果是有明确的分工也不会有什么问题。
可是,学习初期,我们面对的用户需求往往比较简单,可能形成了“将前面这些语言转换过程可能同时进行”的习惯,而后又将这种习惯沿用到解决复杂的用户需求了,这将出现许多意想不到的疏忽和混乱。
当然这一整个“语言转换链”需要走多次,往往不能一步到位,这是符合常识的。先将核心需求的原型构造或表述出来,检验这个原型,再在核心原型上打磨,添砖加瓦都是有可能的。
葛优这个“演员”(模型),也可以在心中多部“戏”(场景)中演多种角色,葛优的演戏功力,就是这些角色的潜在共性,而葛优身上的演戏功力就是“模型”的一种“行为”,数据可以抽象,行为也可以。(这好像不是抽象,就是显而易见的事实而已。呵呵)
DCI是把“交互行为”(interaction) 从“数据模型”(data model)中抽离出来,分布在各个“场景”(context)中,但不是把所有行为抽取出来,非交互行为(比如葛优自身的演戏功力)还是留在“模型”中。