软件开发中不可忽视的代码复用问题

代码复用的考察
服务器君一共花费了584.722 ms进行了5次数据库查询,努力地为您提供了这个页面。
试试阅读模式?希望听取您的建议

复用可以说是任何一个软件企业都不能漠视的课题,因为复用可能对软件的开发效能产生绝大影响,而开发效能直接影响利润,甚至生存。但复用本身将增加当前项目的成本,是一种以当前投入来换取远期收益的行为。与此同时远非所有代码都可以复用,复用本身也有自己内在的一些规律,让我们来试做一些分析。

从结论上来说,只有满足下面两条原则的程序,才可能真正的被复用,否则的话只能采用代码级别的复用。

第一条原则是,程序本身的职能非常独立与业务层面基本无关联,是功能型的模块(包)。

代码中的逻辑表述的是一种关联性,当这种关联只在确定的方面存在的时候,通常我们可以切割出比较独立的模块,而这种模块可以成为复用的基础之一。这也就是常说的【闭包】。

这种复用有许多表现形式,但其本质相同。比如JPEG的库,XML的库,比如我们常提到的组件或控件。在这类复用中扮演关键角色的是一组接口,以及这组接口的基本使用规则。

REP(重用发布等价原则),CRP(共同重用原则)中提到的重用都是这类重用。

第二条原则是,程序本身所描述的过程足够抽象,同具体实现细节可以切的很开。

概念在衍化的过程中其内含的细节会逐渐丰富,但又会共享某些共同的基本特征。很多时候逻辑要处理的是这种根本特征,而非细节。在这个时候,就需要抽象。

好比人可以分为男人和女人,也可以分为老人,青年人和小孩。但因为同属于人这一范畴,所以不管如何分类,必有共通之处。也正因此,某些针对【人】的规则或者价值标准是可以通用于所有人的,即是可以复用的。比如说法律。大多时候,我们不需要指定分别针对于男人,女人的法律。

这种类型的复用不是很好理解,我们用迭代器的例子来进行进一步的说明。

当我们想遍历一个容器的时候,从【头到尾的循环】和【逐个遍历】是属于任何容器的,而同具体的容器无关。但如何从第一个元素,遍历到第二个元素则和容器的具体实现有关。把这种和具体实现细节无关的逻辑提取出来的过程,也即抽象的过程。只有能做到这种程度抽象,非独立的功能性的代码才可能真正的做到被重用。

《设计模式》这本书有个副标题,叫《可复用面向对象软件的基础》。基础这个词的意指与上述说明相同。

由第二条原则而产生的复用的形式可以是,设计模式与框架。历史上的MFC的文档视图结构就是一个典型代表。

一个比较典型的是近来很受关注的Map-Reduce的函数式编程方法,据说这种方法在Google被用来支持并行计算。--参见《软件随想录》

假设说某一功能的主要部分已经实现,比如排序。这时候已经实现的部分是既定算法,可能是选择排序,也可能是插入排序。但对于排序而言,对两个数值进行比较的部分则依赖于被比较的对象,需要被灵活指定。这也就意味着重用排序的实现,等于实现两段代码的对接,实现一部分代码,但另一部分则由用的人在使用的时候指定。

这种方法可以更好的支持并行计算的原因在于,他可以把实现中的可优化部分分割开来。对于查询而言,如何遍历所有数据是可以并行优化的。

如果上述两条原则都无法满足,那么为了达到提升效能的目的,就需要做以实现为基础的代码级别的复用,即完全不做抽象,直接复用代码片段---也许这反倒是应用的最为广泛的复用方法。

很多人恐怕已经习惯了解决某个具体问题前,先到codeproject.com或者codeguru.com上确认一下有没有参考代码。如果不论这种方法的诸多缺点,比如:版权问题,引起代码风格混乱等等,这种方法的现实意义仍是比较巨大。其正面意义可以体现为下面几个方面:

  • 可执行的代码片段可以清楚的告诉我们类库API等等的具体用法,进而缩短我们掌握领域知识的时间。在具体项目中使用某种语言,完全从零开始来完成某项工作的机会非常稀少,我们更多的时候要依赖于某些通用的领域知识。而通过帮助文档来学习类库等的使用方法效率相对低下,而这种可执行的片段代码则精准,且具体的描述了类库等的某一使用方法,使程序员可以更快上手。
  • 可执行的代码片段可以是高质量的。如果我们承认代码的质量是要持续提高,那么这类代码片段,无疑的可以拥有比刚刚写成的代码更高的质量。因此这类代码对生产率的贡献还不仅只与提高编码速度。

如果真的想在组织中使用这种复用方法的话,一个关键点是要控制可执行代码片段的规模。

本文地址:http://www.nowamagic.net/librarys/veda/detail/1510,欢迎访问原出处。

不打个分吗?

转载随意,但请带上本文地址:

http://www.nowamagic.net/librarys/veda/detail/1510

如果你认为这篇文章值得更多人阅读,欢迎使用下面的分享功能。
小提示:您可以按快捷键 Ctrl + D,或点此 加入收藏

阅读一百本计算机著作吧,少年

很多人觉得自己技术进步很慢,学习效率低,我觉得一个重要原因是看的书少了。多少是多呢?起码得看3、4、5、6米吧。给个具体的数量,那就100本书吧。很多人知识结构不好而且不系统,因为在特定领域有一个足够量的知识量+足够良好的知识结构,系统化以后就足以应对大量未曾遇到过的问题。

奉劝自学者:构建特定领域的知识结构体系的路径中再也没有比学习该专业的专业课程更好的了。如果我的知识结构体系足以囊括面试官的大部分甚至吞并他的知识结构体系的话,读到他言语中的一个词我们就已经知道他要表达什么,我们可以让他坐“上位”毕竟他是面试官,但是在知识结构体系以及心理上我们就居高临下。

所以,阅读一百本计算机著作吧,少年!

《高性能网站建设指南》 桑德斯 (Steve Sounders) (作者), 刘彦博 (译者)

《高性能网站建设指南》结合Web2.0以来Web开发领域的最新形势和特点,介绍了网站性能问题的现状、产生的原因,以及改善或解决性能问题的原则、技术技巧和最佳实践。重点关注网页的行为特征,阐释优化Ajax、CSS、JavaScript、Flash和图片处理等要素的技术,全面涵盖浏览器端性能问题的方方面面。在《高性能网站建设指南》中,作者给出了14条具体的优化原则,每一条原则都配以范例佐证,并提供了在线支持。全书内容丰富,主要包括减少HTTP请求、ExpiresHeader技术、Gzip组件、CSS和JavaScript最佳实践、关闭ETags的技巧、Ajax缓存技术和最小化技术等。

更多计算机宝库...