http://blog.csdn.net/begtostudy/article/details/5564236
篇首语】这里的多版本指的是多个定制开发。其实这个问题早在几年前就想探讨,一直没有成熟的思路。后来,甚至到了公司里也调查了一下这个问题,但是通常所说的软件管理指的是版本管理,对于定制的多版本并行开发提的较少。最近,随着反射技术和动态语言的发展,现在看来这种并行开发方式采用配置的方式更好。网上的专家太多了,就不用我多写什么了。董立衡的这篇博文介绍的就很好,我很认同!
主要分析存在多个版本特性时的软件构建策略。多个版本特性在有些情况下仅仅对应于软件的本地化,复杂的情况就是不同版本中模块的业务逻辑、呈现策略都不相 同。这不仅在产品开发过程中增加成本,更多的成本将在维护阶段体现出来。因此,选择一个合适的构建策略对降低开发与维护成本都是非常重要的。
一、传统软件构建策略
不同的版本采用不同的代码,通过派生或直接使用不同的代码实现。每个版本都会对应到一份的这个版本相关的代码。在代码发布成产品时,我们还需要一个 build过程,将源码打包发布成可执行文件。
这里体现多版本特性的代码可能简单可能复杂,关键要看软件整体的设计对多版本的支持。
1.1 采用strategy模式实现
模块A能访问到本地策略,根据不同版本的差异实现Local1、Local2来实现具体的用户需求。
这里存在几个问题。
一、系统中的层次结构很复杂,如果模块E同样也需要根据版本特性来确定自己的行为,这时可能有两种方式:将ILocal 层层传递,从A到C再到E;采用singleton模式。不过这两种方式都破坏了对象的封装性。
二、ILocal中的方法会非常多。系统中所有的版本差异都将放到ILocal的方法中,很快这些方法就会失去控制。那是否可以对特性分类处理呢,将某一类特性放到一个接口中可以降低ILocal的管理成本,但没有从本质上解决问题。
三、Local实现类会随着项目的推进,或者在维护过程中变得臃肿。在项目过了几年之后,这点就成为顽疾了。
1.2 使用编译指令
编译指令是一个非常轻便的方式。在很多著名的商业化产品中都会出现,尤其是在处理操作系统不同版本的时候。
使用编译指令不会出现strategy模式中出现的问题,但是需要小心控制它的使用范围。更加严重的一个问题是,版本非常多的时候(比如几十个)编译指令就成了可读性的杀手。同时增加了build过程的成本与错误率。总之,选择这种方式之前必须慎重考虑。
二、基于配置的软件构建策略
不同的版本采用同一份代码 ,build后得到可执行的文件。但这里得到的可执行文件并不是最终的发布产品。可执行文件加上配置信息才能符合用户的需求。这种情况下,开发人员不仅需要开发代码,而且需要设计配置文件的格式(模块的可配置能力)。
基于配置的软件构建同样需要在整体设计上的考虑。并且有多种实现方式。
2.1 采用Local类
Local类读取配置文件,将配置文件中的配置元素返回给程序模块。这种处理方式遇到的问题与采用strategy模式时非常类似。另外,采用 Local类只能处理相对简单的逻辑,例如控制界面显示等。
2.2 基于插件的实现方式
插件是将代码与配置分离的一种有效方式。与上面的Local类相比,插件的机制将配置粒度更加细化。
可以将插件系统的配置按照功能分为两大类:结构化配置、差异化配置。
结构化配置指定插件与插件之间的关系,插件之间相互协作。差异化配置体现单个插件的可配置能力。系统分为多个“代码+插件”的可执行模块。
2.3 代码与配置的权衡
在基于配置的软件构建模型中,代码和配置之间存在着一个分水岭。如何划分代码配置的界限影响到所有模块的详细设计。
配置的目的是什么,我们想要达到什么效果?在分析这些问题之前,先说明一下使用配置文件的两个极端。
“配置必须配置的点”是配置文件的最低限度。判断是否达到了这个最低标准的方式非常简单,就是观察系统中是否存在因多版本特性而引起的多份代码。
“配置能配置的所有点”是另外一个极端,达到的最终效果就是完成了一个配置语言运行的环境。
居于左侧的模块复用度低,但配置文件简单,易于维护。居于右侧的模块复用度高,配置文件复杂。具体的项目需要在这两个极端之间找到一个平衡点。
2.4 设计的一致性
一、怎样找到代码与配置之间的平衡点,最好的情况是由架构师定下一个判断原则,指导设计人员进行详细设计。这对于维持产品的设计一致性非常关键。
二、在配置度高的情况下,不同的模块定义了特有的配置文件规则。这些规则的统一对保证一致性也是一个挑战。
三、加入工具支持
好的工具可以提高生产效率,降低重复性劳动的成本。
3.1 传统软件构建策略
在基与多版本的代码开发时,工具能做的是代码生成工作。包括框架代码以及简单的控制代码。更多的情况下仍然需要手工修改源码文件。
关于代码生成技术,在.Net框架中提供了一系列的类来完成(System.CodeDom namespace等),可以参考相关资料。这种技术自己实现比较简单的情况也并不复杂。
3.2 基于配置的软件构建策略
在基与配置的软件构建策略中,工具的主要目标可以放在配置文件的管理与生成上。代码由开发人员编写,工具生成配置文件后经过测试就可以发布。
这里代码与配置的分界线会影响到工具的复杂度。需要协调代码编写、配置文件管理、工具编写这几方面的成本与收益。
四、加入动态语言
将动态语言技术加到系统中,代码与配置的界限就变得模糊了。使用动态语言作为配置文件的形式可以充分利用它的语言特性提高配置能力,省去了自己设计配置格式与解析配置的过程。
上面说模块自定义的配置规则多的情况下,将破坏系统设计的一致性。如果采用某种动态语言,那么这种规则实际上就是这种语言的语法,有助于开发人员理解各个模块。但这时候的生成工具复杂度就增加了,本质上已经成为动态语言的代码生成器。
分享到:
相关推荐
### Dubbo下的多版本并行开发测试解决方案 #### 背景与意义 在软件开发过程中,特别是微服务架构的应用场景下,多个版本并行开发是常见的情况。这不仅能够支持快速迭代的需求,还能有效避免因单一版本更新所带来的...
软件并行开发过程推选优秀ppt.ppt
2. PVCS Version Manager:由MERANT公司开发,用于源代码、文档等的版本管理,提供对并行开发的安全支持。 3. ClearCase (CC):作为ROSE构件的一部分,是强大的配置管理工具,适用于复杂的产品发布和分布式团队合作...
它需要综合考虑HPC系统的硬件组成、软件环境、用户交互方式、网络连接特性以及容错机制的应用模式等多个方面,以构建一个高效、实用、友善的并行程序开发和使用环境。这些知识点对于从事HPC、并行计算、系统软件设计...
通过结合Rational RequisitePro的需求管理和Rational ClearCase的版本控制能力,团队可以在并行开发环境中高效地处理需求工件,减少冲突,提高开发效率,同时确保软件质量。这种实践方法不仅适用于需求分析阶段,也...
在IT行业中,Mac OS X和iOS的并行开发是一个重要的主题,特别是在软件开发领域。这个主题涉及如何在苹果的两种主要操作系统环境下同时进行应用程序的构建和优化,以满足多平台的需求。下面我们将深入探讨这个话题,...
在软件开发过程中,团队协作与并行开发是提高效率、减少冲突的关键策略。Subversion(SVN)作为一款流行的版本控制系统,提供了强大的分支管理和合并功能,使得并行开发成为可能。本文将详细介绍如何利用SVN实现并行...
### MPI并行程序开发基础知识详解 #### 一、并行计算概述 在现代计算领域,随着数据量的急剧增加和技术的飞速进步,并行计算已成为处理复杂问题的关键技术之一。并行计算通过同时利用多个处理器来加速计算过程,极...
标题《迟学奎_58同城APP多团队并行开发架构实践》中蕴涵的知识点可从软件工程的角度进行拆分,主要关注于如何在大型项目中,特别是在58同城这样的大型本地生活服务平台上,实现多个团队并行开发的架构设计与实施细节...
并行开发是现代软件开发中的一个重要领域,随着计算机硬件的发展,多核处理器的普及使得并行计算成为提高程序性能的有效手段。本文主要介绍了并行开发中的两个关键概念——硬件线程和软件线程,并通过.NET Framework...
展并行软件的开发方法和工具是当前并行计算领域 的研究重点和热点 . BSP ( Bu lk Synch ronou s Paral2 lel) 是一种独立于体系结构且具有可预测性的并行 模型, 它既是算法理论分析模型, 也是一种并行程序 设计的规范...
并行版本系统CVS(Concurrent Versions System)是一种开源的版本控制系统,用于管理软件开发过程中多个用户对同一份代码或文档的修改。本教程将深入介绍CVS的基础知识,包括安装、配置以及常用操作,帮助读者掌握...
在现代自动测试系统领域,尤其是并行自动测试系统(ATS)中,软件架构的设计和构建是整个测试系统开发中的关键一环。并行测试系统的开发难度较大,主要因为测试过程的复杂化和多样化,以及测试任务的并行执行要求。...
CFD软件:OpenFOAM二次开发_OpenFOAM并行计算与优化.docx CFD软件:OpenFOAM二次开发_OpenFOAM性能优化与调试.docx CFD软件:OpenFOAM二次开发_OpenFOAM数据结构与文件组织.docx CFD软件:OpenFOAM二次开发_OpenFOAM...
这个代码库旨在帮助工程师们快速构建多平台MPI与opneMP的混合并行仿真软件开发环境。当然,你只用MPI也没问题的啦。请根据需要选择相应docker镜像。 安装并测试 首先,你需要在你的电脑上安装Docker并开启虚拟化。 ...
并行计算的实现依赖于高效的多线程或多进程技术,其中Intel提供的并行编程工具如Threading Building Blocks (TBB)和OpenMP是不可或缺的。使用这些工具,开发者可以创建并行任务队列,并将数独盘面上的每个单元格或一...
产品并行开发是一种先进的产品创新方法,旨在通过多学科的协作和集成流程,显著缩短开发周期、降低成本,并提高产品质量。在本文档中,以“铁路货车产品开发并行工程”为例,阐述了并行工程在实践中的应用。 齐车...