基于领域模型驱动的思考

来源:互联网 发布:c语言爱心的代码 编辑:程序博客网 时间:2024/06/10 00:18

  曾几何时,我们评价一个架构师和开发人员的标准,就是擅长提前规划、能够高瞻远瞩为产品添加功能和结构、能够想用户之所想急用户之所急。但事实上,这样的要求给项目增加了不少的负担。首先,老板需要找到这样一个对特定行业了若指掌的软件设计人员,就我的从业经验来看,能满足这样条件的人可以说是凤毛菱角,而且往往价格不菲,按照这样的组建团队的标准,可想而知成本是相当高的;然而,即便是我们已经组建了这样的一个团队,问题依然存在,由于架构师为了体现自己的价值,前瞻性的为项目添加一些功能、结构和机制,同样增加了开发时间和软件的复杂度。我想每位老板都不想看到高高在上的支出成本和遥遥无期的发版时间,同时出现在部门的业绩报表中。

  那么,我们是不是可以换种思路,正所谓穷则思变,在过去的几年中,有一种叫做“极限编程”(Extreme Programming,XP)的思想逐渐流行。它鼓励我们“做可能管用的最简单的事”,一股类似于搞运动的思想风潮,试图采用循规蹈矩的方式指引开发者快速达到目标的一种方法。

  两种思路,貌似走向了两个极端,“过度设计”和“尽量简单”,但就实际效果来看都没有达到预期的目的。伴随着软件的更新换代速度越来越频繁,功能性越来越强大,笔者认为这两种思路都没有很好理解现代软件开发的背景和条件,或许采用一个折中的思路,选择一个在二者之间合适的位置是一种明智的做法。架构师和开发人员必须基于项目的需求作出设计决策,例如以模型为中心、领域模型、数据库、消息传递机制等。

软件开发整个过程的驱动力

  所谓软件开发的过程,就是指推动项目前进的方法学,即每个阶段应该完成什么、何时完成,已经如何完成。如下图所示,经典的过程模型就是瀑布过程模型。每个阶段都严格按照线性模式进行,简单描述就是,首先编写需求规格说明,然后按照需求构建系统架构分析,然后开发测试,最终发版。

  瀑布过程模型的缺点显而易见,所以在很多年以后,大量不同的过程被引入,例如极限编程(XP),它可以归为敏捷(Agile)过程下面。XP与瀑布过程正好相反,其基本思想之一是,我们不可能在项目之初就知道总够的事情来编写真正完善和详尽的规格说明,知识是随着项目的推演而不断丰富的。

  不论采用什么过程模型,软件开发的整个过程都是围绕着模型与需求展开的,下面分析几种驱动力。

Ø  预先架构设计

  如果每个新的软件都是从零开始的,那么代价是我们无法承担的,对于架构来说尤为重要。我们总是首先思考目前最喜欢的默认架构,看一下它是否符合正在构建的新项目的情形和需求,希望能从以往的项目得到继承,并考虑如何能够从架构角度改进它们。

Ø  模型驱动架构设计

  模型驱动架构(Model-DrivenArchitecture,MDA)类似于“通过用UML绘图来编程”。MDA领域的核心思想是通过创建独立于平台的模型(Platform Independent Model,PIM),然后将其转换为特定平台的模型(Platform Sepcific Model,PSM)。就好比,通过编写UML设计类图,直接生产JAVA可执行代码的过程。衍生的问题是在切换的过程中会出现精度损失。

Ø  领域驱动设计

  领域驱动设计(Domain-DrivenDesign,DDD),将大部分精力集中在构建好的模型上,以及在软件中尽可能按照这个模型来实现。所有重点是创建一个尽可能简单的模型,但这个模型仍然要抓住应用程序的领域重点。在开发过程期间,由开发人员和领域专家对知识进行共同消化,所获取的知识被放入模型中。

Ø  测试驱动的开发

  测试驱动开发(TDD)用来验证各阶段任务是否正确合理,保障各阶段始终保持一致,测试过程并不是只存在于开发的后期,而是分布于开发过程的每一个阶段。无论使用什么过程,都可以使用自动单元测试。

  TDD主张在编写实际代码之前编写测试,在这个过程中,测试将驱动设计和编程。TDD并不会自动帮助我们发布毫无缺陷的产品,但确实会提高质量。使用TDD是,我们不必事先创建大量涵盖每个小细节的用例,而只要将重点集中在用户核心需求上,并且只添加用户需要的材料即可。

Ø  重构

  重构是一步一步地执行小的、众所周知的变更,以改进现有的代码设计。即在不改变显性行为的情况下提高可维护性,换句话说,改变方式,不改变内容。简而言之,重构的作用就是将糟糕的代码转换为良好的代码。因此,我们不必在前期就拿出一个完美的设计,而且无论如何在前期也不可能设计的如此完美。

后记

  世界上不存在哪一种模型可以适应所有的项目,在实际项目中,我们要综合项目的实际需求,采用合适的模型,并且对模型进行必要的删改,使之更好的指导我们的项目研发的各个过程。领域模型设计(DDD)无疑是一种很好的设计模型,它已经对于软件设计产生了巨大的影响,如果我们的项目经理尝试将DDD的设计文化在现有的项目中生根,并不断的持续改进,我相信它将会为我们提供更多的机会,带来更大的价值。
原创粉丝点击