Never give up - LEO

人 只有在合适的地方 才能体现出最大的价值
  博客园  :: 首页  :: 联系 :: 订阅 订阅  :: 管理

软件设计(1)--避免的问题

Posted on 2007-05-31 14:36  lizhiwen  阅读(3142)  评论(9编辑  收藏  举报

      软件开发出来后,无非就两大团体来接触他。一个是用户,一个是开发者。所以在设计软件的时候这两个团体要同时考虑,从各个角度来权衡每个设计点的偏重点。

       开发的软件是给用户操作的,用户每天都要与之打交道,所以界面的美观性,功能的实用性,操作的简易性,数据传递的速度以及比较贴近的业务逻辑对于用户来讲都是很重要的。

       而对于开发者来说,软件开发完成后并不是就不用管了,软件的后期维护也是一项很重要,很繁琐的事情。用户会随着时间的推移,不断的改变着他的需求,要你对软件进行改进。当然,你会把一些需求挡回去,把一些需求通过现有的条件变种方式来实现,但总有一些你需要增加或修改。这时,你的软件在开始设计的时候是不是够灵活,在你修改的时候便知道了。

       如果维护的软件让你头疼,宁愿重新开发也不愿意去修改,那就说明这个软件设计的很不成功。

 

    要想让软件不发生腐化,使以后的维护工作更加容易,那么设计软件的时候应该尽量避免以下几个问题:

1.僵化性(Rigidity):设计难以改变

当用户提出一个新的需求时,需要对程序的一些地方进行改动,可当你打开代码,发现虽然是添加一个很小的功能,却牵涉到了很多地方。这样单一的改动导致有依赖关系的模块中的连锁改动,那么设计就是僵化的。没人愿意为了一小块玉石而去移掉整座山,愚公移山的精神在这里不值得发扬。

 

2.脆弱性(Fragility):设计易于遭到破坏

用户想要添加的功能改完了,然后重新进行测试,这时却发现跟这个新加功能没有概念性关联的其他功能发生了错误。而去修正这些问题又会引出更多的问题。就像在玻璃上钉钉子--越钉越碎。

 

3.牢固性(Immobility):设计难以重用

同类系统,总是会有许多相似的地方,甚至有些地方完全相同。当作完一个项目后,又接了一个项目,这两个项目功能方面很相似,只是给不同的客户用,业务逻辑上稍有不同,但是在人员管理和权限管理上基本一致。这时你想把之前的项目中人员管理和权限管理这部分拷过来改改就用,却发现改动的工作量相当巨大,还不如重新作,这就说明之前的项目在设计时重用性能太差了。

 

4.粘滞性(Viscosity):难以做正确的事情

改动一个功能时,往往会有多种改动的方法。其中一些方法会保持初始的设计,另外一些方法会破坏初始的设计。按照常理来说,一般会选择保持初始设计的方法,可是你却发现那些保持设计的方法的改动比那些破坏设计方法的改动更难以对付,这就表明初始设计具有高粘滞性。

 

5.不必要的复杂性(Needless Complexity):过分设计

不是说越复杂的软件就是好软件,现在的电器还不是功能越多,越容易坏吗!软件也是一样,设计的越复杂,逻辑就会很繁杂,开发起来也会很费时间。本来一个类型列表页面只有三个字段,最多不过10条记录,你非要在页面上加上一个翻页控件,这不是画蛇添足吗!

 

6.不必要的重复(Needless Repetition):滥用鼠标(乱拷贝)

拷贝和粘贴确实是能提高开发效率,但是有时会造成过分的滥用。系统中有一个计算总金额的公式过程,在很多地方要用到,于是每个开发人员都

拷贝粘贴到自己的程序里,过了一段时间,国家下政策了,调息了,计算公式要改动,这下大家傻眼了,满“项目”找这个公式过程。费时费力。

 

7.晦涩性(Opacity):混乱的表达

开发的模块难以让别人理解。一个软件有时要经过很多开发人员编写,如果模块的命名和编程的格式都按照自己的方式来进行开发,时间一久,愈是往后接手的开发人员就越痛苦,打开代码,根据里面的命名都不知道这段代码是干什么用的,总是要花很多时间先来理解代码。