工作后第一个软件架构设计

工作快半年了,最近才经历了第一次模块架构的设计。(之前都是头说,我们听,提意见。

只是在一定程度上解决了问题,但是感觉还是记录下,为以后的成长做个见证。

比较喜欢吃水果,就从水果的角度描述了。

有三种水果:苹果,梨,桃子。apple,pear,peach。

他们有共同base class:fruit。

按照需求,每种水果有相同的操作集合,相同操作对于每种水果来说大同小异。为每种水果下的每个操作定义了具体的实现类。eatApple

, cookApple;eatPear,cookPear;eatPeach, cookPeach。每个操作类都继承自水果基类。(不要考虑合理性,这个是必须的。我们不是真的在吃水果)

这样,eatApple, cookApple继承自apple,公共的部分都放在apple中。比如apple的大小,颜色。。。eatApple,cookApple包含了自己独有的部分,如eat用刀,cook用锅。

到这里没有什么问题,但是到和锅的描述类还没有实例化。

在eatApple和eatPear中,刀就是从中间切,实现方式是一样的。如果有两种水果,那我会将刀的实现放在fruit中。但是还有peach(中间有核,不能一刀切开)。

各种情况分析下:

如果将apple和pear的刀放在fruit中,那么apple和pear对于刀的使用方式只实现了一次,没有代码冗余。peach的刀在eatPeach中复写。但是如果再来一种水果和peach使用相同的方式,那么还需要重复一次peach的刀。这种方式不合理。

如果将所有的刀都放在子类中,那么apple和pear肯定是代码冗余的。

这里我想了一天,但是突然想到一个非常基本的问题:为什么将刀的实现放到水果类中。吃水果用刀,但是具体怎样用水果是不必关心的。

抽出刀的实现,建立新的类。

基类knife。fruit中包含一个knife的对象。

knife1,knife2. knife的具体实现类。

fruit中knife的实现在子类中完成。那么apple和pear就可以共用同一个knife(相同的子类)。peach用自己的knife。

总结下。主要就是两个方面:组件取代继承;类的定义。

组件良好的扩展性,可以任意组装,拆卸。

类的定义需要遵循一个类只关心一种事情。关心太多让类很累。同理,一个函数应该只完成一件事情。

来源:云中漫步87

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2012年4月21日
下一篇 2012年4月22日

相关推荐