BAD SMELL

拙劣设计的bad smells(坏味道、潜在问题、缺点)通常是违反了设计原则才出现的。
僵化性(rigidity):指难以对软件进行改动,即使是简单的改动。如果单一的改动会导致有依赖关系的模块的连锁改动,那么设计是僵化的。必须改动的模块越多,设计就越僵化。
脆弱性(fragility):指在进行一个改动时,程序的许多地方就可能出现问题。常常是,出现新问题的地方与改动的地方并没有概念上的关联。要修正这些问题会引起新的更多问题,从而使得开发团队象一只追逐自己尾巴的狗(忙的团团转)。
牢固性(immobility):指设计中包含了对其它系统有用的部分,但是要把这些部分从系统中分离出来所需的努力和风险是巨大的。这是一个令人遗憾的事,但却很常见。
n粘滞性(viscosity):包括软件和环境的粘滞性。当面临一个改动时,开发人员常常发现会有多种改动的方法。其中,一些方法会保持设计,而另一些会破坏设计。当那些可以保持设计的方法比那些破坏设计的方法更难应用时,就表明设计具有高的粘滞性。即做错的事容易,而做对的事却很难。我们希望在软件设计中,可以容易地进行那些保持设计地变动。 当开发环境迟钝、低效时,就会产生环境地粘滞性。例如:如果编译所花费的时间很长,那么开发人员就会被引诱去做不会导致大规模重编译的改动,即使那些改动不再保持设计。如果源代码控制系统需要几个小时去check in 仅仅几个文件,那么开发人员就会被引诱去做那些需要尽可能少check in 的改动,而不管改动是否会保持设计。
  不必要的复杂性:如果软件中包含有当前没有用的组成部分,它就含有不必要的复杂性。为过多的可能性做准备也许会带来回报,但更多的时候不会(因为引起混乱)。
不必要的重复:剪贴和粘贴也许是有用的文本编辑操作,但是他们却是灾难性的代码编辑操作。当相同的代码以稍微不同的形式一再出现是,就表示开发人员忽视了抽象。当系统中有重复的代码时,对系统的改动会变得困难。在一个重复的代码体中发现的错误必须在每个重复体中一一修正。 晦涩性:指模块难以理解。 代码可读性是一个很重要的因素。


你可能感兴趣的:(软件设计原则)