软件代码设计零碎杂想-4

多年以前,当我还对面向对象的软件设计思想热火朝天的时候,我手里捧着一本带着软件复用字样的书,刚巧被公司搞UI设计的同事看见了,他当时已经考取了PMP,问我,“软件复用,你们能开发出这样的被复用的代码来吗?”

我当时思考了半天,回答是,我现在还没有能力把现在做的这个项目里的代码,复用到另一个项目里去,当然,函数库,算法库,这库那库除外。

以面向对象的思想,用面向接口编程,至少有3个参与方,接口类,具体类,使用接口的客户,一般来说,只要暴露给客户接口类接可以了,再用一个创建工厂来创建接口类的实例,客户拿着这个实例就可以做事情。通过这个接口,可以再要别的接口,针对接口,就可以复用很多代码了。理论上很美好,但实际上抽象出来的接口能满足另一个项目么?

再说,有可能被不同项目使用上的,基本都是基础功能代码,这个,本来就很容易做成库来使用的。而基本上,业务逻辑,可被复用的可能性,非常的低了。但就一个项目来说,频繁变更的需求和突然冒出来的没有预料到的情况能在该项目范围内解决掉就很不错了,更不要说在多个项目之间进行复用。

我们来看看进行代码复用所要注意的原则,文章来源为:http://www.ibm.com/developerworks/cn/java/reuse/

来看看第一原则:面向接口编程:

对接口编程

"对接口编程"是面向对象设计(OOD)的第一个基本原则。它的含义是:使用接口和同类型的组件通讯,即,对于所有完成相同功能的组件,应该抽象出一个接口,它们都实现该接口

这个原则的描述,基本上也暗示了进行设计的时机,是什么时候?还是上篇所阐述的,需要在对需求进行分析完之后,将如何实现需求的步骤一一落实,分析具体到每步都可以调用一个已知的或者是已有的功能为止。

为什么这么说?请看原文:“它的含义是:使用接口和同类型的组件通讯,即,对于所有完成相同功能的组件,应该抽象出一个接口,它们都实现该接口”

这个单词,应该是作者在写文章的时候,潜意识里写出来但是并没有仔细深思熟虑过的东西。面向接口编程,首先得将“所有”功能相同的组件找出来,然后才能抽象出一个接口来。所以我一再的啰嗦,进行设计,是对需求的仔细分析之后所做的事情,而不是在知道了大概的功能之后马上能做出来的动作。

很明显的,如果这个原则说的没有错误,那么就可以证明出来,A项目的代码,并没有可能复用到B项目中去。原因很简单,A项目在进行的时候,不能预测到B项目的需求,并不能将B项目中功能相同的组件也找出来。所以A项目的接口,有可能适合B项目,也有可能不适合B项目。

再一次对非常想成为软件架构师的正在如痴如醉的学习面向对象设计的同学们告诫一声,进行设计,别想一下子从总体上就抽象出软件架构来,别还没有对需求进行过仔细的分析,就把共性给抽象出来了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值