• 快捷搜索
  • 全站搜索

软件设计中的复用思想漫谈

2018-01-08 14:36:38作者:中国银行软件中心 赵书祥编辑:金融咨询网
提高开发效率的根本在于减少重复的分析和设计,减少重复分析和设计的中心思想就是复用。本文所说的复用,是指易于学习和掌握的,可用于减少下次开发活动的所有设计、程序、构件、思路、方案等。

软件设计是一个非常大的概念,里面包含了非常多的内容。软件创建之初,需要进行架构设计、模块设计;在产品维护过程中,又会进行重构设计。一个设计好坏与否,可从容错性、易用性、可扩展性、可测试性、可移植性等方面来衡量。概括地说,大多设计可以用总工作量来衡量,因为不论是可扩展性不好,还是可测试性不好,都会引发非常多的额外工作。因此,总工作量在一个成熟的开发团队里体现为开发效率的高低。

        提高开发效率的根本在于减少重复的分析和设计,减少重复分析和设计的中心思想就是复用。本文所说的复用,是指易于学习和掌握的,可用于减少下次开发活动的所有设计、程序、构件、思路、方案等。

一、复用的根本——减少人脑思考的成本

        作为软件开发人员,必须首先理解和掌握架构、语言、需求,方能进行设计。对于维护来说,又必须了解以前的架构和所有被维护的模块、设计、产品,才能避免引发一系列的问题。对于像银行核心系统这样庞大且连接着众多的外围系统,将各种类别的参数、合同、要素、流程、功能、平台、渠道等要素交织在一起的设计,要想进行全面的分析,其工作量往往要超越人脑的极限,更何况还需要在有限的时间内完成。复用思想的精髓就是能够降低人脑的思考要求,提升软件设计的质量和效率,使人易于学习和掌握。人脑的思考习惯和复用息息相关。

        1.高内聚低耦合的特征

        我们知道不论是面向过程软件设计中的模块,或是面向对象软件设计中的对象,这些组件都应该满足高内聚、低耦合的特征。实际上这正是人与人之间关系的写照:一个人要掌握非常多的东西,但人与人之间则不需要关联很多东西,有时一句“我爱你”,就可以令人许下终身。

        2.接口要素简便

        两个组件建立关联,须满足要素比较少这个条件。比如向人借斧头,只需知道对方有没有斧头、愿不愿意借就可以,至于他家里有多少钱、有没有镰刀、家中共有几口人等都不需要知道。如果对方的要求特别多,什么时间能出借、什么时间不能出借、要答应什么条件才能出借,甚至需要提交符合要求的申请才能出借,那么,除非特别必要,一般人都会拒绝建立这样的联系。

        3.范围有限

        全球人口虽然有几十亿,但与自己有关系的也就那么几个。如果再认识新的人,原来认识的人的交流就会变少,甚至不再联系。毕竟人的时间是有限的,精力是有限的,不可能无限制地增加联系人。

        同时,对于任何一个人,也不可能知道太多东西,“人生有涯而知无涯”,一个人要做好一件事情,必须专注一件事情。一个组件也是一样,必须限制其处理的功能范围。

        4.近大远小

        一个人会认识许多人,关系有亲有疏,久而久之会形成一个比较稳定的沟通环境,对于组件而言,所连接的实体,一定也是要考虑远近不同这样的特点。如果不分远近,会提高经常联系的组件间的通信成本,或会使花了很多精力设计的远端接口根本用不着。

        数据也有近大远小的特点,比如市内账户转账的概率,要远远大于跨地域转账,数据上的设计如果不考虑这样的特点,就会导致本地的活动成本过高、数据量过大。

        还有一种情况,就是原本的设计架构下,随着业务的增长,沟通变得特别频繁的组件在逻辑上的距离却非常远,这种情况会导致中间经过的组件有过多无谓地消耗。如果将这两个组件在逻辑上进行直连,减少中间环节,使之符合近大远小的特征,按照封闭开发的模式进行组织,则整体效率会大大提高,产品查错等管理也变得非常方便。

        5.自然接口

        人与人的沟通采用自然语言。组件之间的接口如果采用自然语言,后续的修改、扩展、维护都会变得非常方便。过去,SQL语言是几乎所有关系型数据库的接口语言。SQL语言之所以能够得到推广,就是摆脱了固定长度固定位置的接口规格束缚,数据库程序员不必再纠结于字段的位置、后续是否会增加字段,只需要按照自己的意思,编写正确的SQL语句,数据库就可以返回期待的数据。

        网络编程中出现的XML规范,使几乎所有类型的组件接口可以按照自然语言的方式来传递数据。XML不仅可以自我描述数据格式、含义,也能够使收发数据双方不用事先约定,就进行通信。有了XML,才有基于SOAP、WSDL、UDDI之上的Webservice,才有了以服务为复用组件的SOA。

        自然语言不存在版本过渡问题、字段顺序问题、字段废弃问题。未来的接口也一定是朝着更加接近自然语言的方向发展。

        6.人脑与设计

        软件系统的设计,实际上就是将人的思维方式使用计算机来模拟。同时,最符合人脑思考方式的软件设计,可以被认为是优秀的软件设计。优秀的软件设计中的组件一定是易于被复用的组件。易于复用意味着可以减少人脑思考的成本,从而使开发过程的复用程度提高,生产效率也就跟着变得更高。

二、复用策略

        1.不同粒度的组件复用

        结构化编程中的模块,对象编程中的对象,架构编程中的构件,服务编程中的服务,这些都是不同粒度的可复用组件。实际上,没有一个系统只使用一种粒度的复用组件,每种可复用组件或提供功能、或提供服务,可能同时出现在一个系统中。仅在一个代码文件中,也可能存在不同粒度的组件。

        从复用角度来说,复用组件可以呈树状分布,叶子节点是可复用的最小粒度组件,也许是函数、也许是程序段,每往上一层,复用粒度就变大一些。以笔者开发的账户信息灵活维护程序为例,组件复用树如图1所示。

图片1.jpg

        对于上述复用结构,每一级都可以拥有自己不同于下层的复用方法。在软件开发中,开发人员很容易陷入两种情况:一种就是所有的程序都写在功能实现代码中,相当于使用一层复用机制完成。另一种是在前人写好公用组件的基础上,在程序中不分场景,直接调用公用组件,在公用组件的调用点特别多时,如果想改动调用方法,所有调用点都必须参与分析和修改,这可以看作是两层复用机制。如果增加一层,每个场景再生成一个组件,然后使用这个组件去调用公用组件,那么这个场景的改动就可以限制在这个组件中,而不是所有程序中。因此,多层复用机制(如图2所示)是最理想的复用机制。

图片2.jpg

        2.不同形式的复用

        复用是无处不在的,人类在学习、传承、模仿、再创新的循环中逐渐进步,前人的成果就是后人的复用对象。在软件开发中,除了组件,还有设计的复用、流程的复用等。

        无论是方案、系统架构、设计模式,都是以文档形式存在的知识形式,比如设计模式中的工厂模式、装饰模式、观察者模式、中介模式等;比如框架中的Struts框架、Spring框架、Hibernate框架等。这些都是比较具体通用可复用的设计,平时开发中遇到的一些问题的解决思路、应急预案等也可以放入复用库,通过关键词搜索使之得以复用。

        百度这样的搜索门户已然提供了一个非常好的复用机制,只要有一个问题,输入到搜索框,提交后,就可以看到多种多样可复用的解决思路。而淘宝等则提供类似于组件复用的机制,输入关键词,就可以看到已经在售的产品。

        在开发过程中,有些工作的处理不是以方法的方式存在,而是以流程的方式存在。完成一项工作需要完成一系列事务,这样我们可以对一系列事务进行抽象处理,形成可复用流程。比如我们投产使用的流程控制表、开发过程中的系统分析方法。后续如果出现变动,只用按照已有的流程进行少量的修改,就可以应用到新的场景中。

        每个人与其他人的联系是有限的,而且符合近密远疏的特征,但是整个世界却是大致均匀、无限地联系在一起。随着通信技术的发展,联系的平台也在发生变化。人类沟通的渠道从口口相传、信件、电话、邮件,到论坛、微博、微信等。信息传播速度越快,人与人之间的沟通也就越来越紧密,沟通渠道上承载的信息也越来越多。这使得我们可以在有限的时间内完成越来越复杂、越来越庞大的系统。因此必须建立更加健康、灵活、关联性强的沟通系统,而不是仅仅依赖于传统的办公系统。

        在系统开发过程中会出现各种情况,比如,文档和代码粒度差别非常大、关联情况特别复杂、功能需要持续地更新、不同文档有不同的展示渠道和范围。人工处理这些信息,会出现非常多的问题。比如,不知道别人新增了同一模块,不知道同一接口都有谁使用了,不知道同一字段的变动影响的范围有多大,不知道新流程又增加了哪些要求等。

        特别复杂的系统必然拥有无限关联的特征,如果使用一个线性关联的办公通信工具来解决,必然会引发人脑思考成本的大幅度提高。虽然开发和分析、设计人员花费了非常多的精力去追溯、询问、分析这些关联,仍然会发生百密一疏的情况。目前业界有很多工具来分析软件本身或者使用工具直接开发,但对于一个软件开发组织而言,最高效的方法就是建立一个自己的软件开发知识系统,这个系统和软件同步建立、同步维护,当在软件中修改一个字段,就可以在文档系统中,通过模拟修改分析,搜索出修改所涉及的范围,虽然这会增加开发的工作量,但会大大减少后期的分析工作量,降低开发风险,提高开发效率。

        拥有了无限关联的系统支持后,就可以在开发过程中,在任何时点从知识库中找到可以复用的功能组件、组件关联、接口含义等信息,最大程度地减少学习和分析的过程,提高开发效率和软件质量。

(文章来源:中国金融电脑杂志)

扫码即可手机
阅读转发此文

本文评论

相关文章