在我接触的开发者中,越来越多的人都在抱怨:为什么今天的软件开发变得如此困难?我觉得主要原因是业务领域跟计算机领域之间的概念存在着很大差别。一般来说,业务是用自然的语言来表述,但是软件有可能是用一些非常低级的计算机语言来表述的。构建一个软件需要写很多的代码,要写很多的控制逻辑,有很多复杂的东西在里面。正如目前很多的企业都在把业务与IT相结合作为一项重要的任务来做一样,其根本是要业务与软件之间建起一座桥梁。根据我多年从事软件方法论研究的经验,我认为有四种方法使得软件开发变得更加简便。
第一种方法就是尽量向业务领域描述靠拢,尽量用高级语言来直接描述业务领域的概念。今天的开发人员都习惯于最简单的软件开发方式就是坐下来直接写代码,这看上去好像是一种最简单的方式,但实际上最后会给我们带来更大的麻烦。如果开发人员只是写代码而没有设计的话,很有可能他所构建的这个系统的架构就不是那么完善,同时代码之间没有很好地协调。不同的开发小组写的代码可能功能上会有所重叠或者是相互冲突,不同的开发小组就会使用不同的、不一致的格式进行交互。
这里,我所推荐的方法就是由标准化组织对象管理组OMG (Object Management Group) 提出来的——MDA (MDA Model Driven Architecture,模型驱动架构)。通过MDA,我们需要使用一个高级的模型来描述一些业务领域的概念,基于这种高级的模型再来生成基于某种特定运行平台的代码。在MDA里我们需要三样东西,首先我们需要来描述问题的模型,在这里可以使用UML或者是使用新的领域描述语言DSL (Domain Specific Language) 来描述业务领域方面的模型;第二个需要利用架构框架来描述具体的实现,架构框架可以针对某种具体实现作出一些假设,从而基于这些假设来减少我们在建模阶段所涉及的细节,最后通过一些自动化的工具来生成实际可运行的模型或者是模型的特定翻译工具等等。
第二种方法就是完全生成。在这种技术里,我们只有一种单向变换,即:从模型直接变换到代码,而且是百分之百地生成代码。在这种方法里开发人员是不会去修改生成的代码。但是,这也对DSL语言提出要求,DSL应该有能力来描述足够的细节。编译器就是一种完全生成的很好例子。我们都知道,只会用编译器生成代码,但是从来不会去修改编译器所生成的汇编代码或者是信息代码。现在,我们通常使用的另外一种完全生成的例子还包括格式的转换,比方现在有些工具可以帮助我们从UML模型生成XML格式。
在我看来,完全生成这种技术有可能适用于那些我们能够掌控所有细节的场合下使用。尽管现在这种完全生成的技术不是非常成熟,但是我预期在将来这种技术应该是越来越可用的。
第三种方法是把代码嵌入到模型中去,也就是把前面两种方法都结合在一起。在这种方法里开发人员会把代码的片段插入到模型中去。在这种模型里,如果DSL的描述能力不够的话,开发人员就会用编程语言来描述这些细节。当变换工具生成代码时就会把开发人员插入的代码嵌入到最后生成的代码中去。所以,如果开发人员想修改最终生成的代码的话会修改这个模型中插入的代码片段,重新利用这个模型来生成代码。这种方式有可能更像我们谈到的部分生成的例子,因为在这种技术里开发人员还是需要来写一些编程代码。
这是一种非常灵活的工作方式,但是它要求开发人员同时在两个不同的层次进行工作,他既应该在高层次模型这个级别工作,同时也需要开发人员在低层次代码这一级别进行开发工作。但是在当前这个情况下,在我们有更好的完全生成的解决方案之前,这有可能是一种比较实际的技术。
第四种方法是一种更加先进的变换技术,在这种变换技术里我们为这种变换本身搭建起一个变换的模型。我们会针对这种变换来建立起一个模型,并且利用这个模型把原模型跟目标代码联系起来。
尽管这是一个非常强大的技术,但并不适用于每一个开发人员。它需要一些特定的技能以及相关的知识。我更建议那些在开发团队里专门负责构建这个模式或者是构建架构框架的人,有一部分人可以用这种技术来构建出比较好的模式或者是架构框架,使得这种好的经验可以使更多的开发人员受益。
CSDN声明:此消息系转载自CSDN合作媒体,其中细节未经CSDN证实,特此声明