在一个系统的整个生命周期里,理解和改动这类维护工做的比例通常很是之高。为了维护的方便,要尽可能将系统划分为能够独立理解与改动的模块。这就要在设计的时候注重DRY原则与Shy原则。不过,这两条原则有必定的冲突,并不总能兼得,因而在追求的时候要重视分寸。设计
有两种状况会给维护者增添很大的麻烦:一种是为了调整一个效果,要改动无数个地方;一种是只改动了一个地方,却影响了不少效果。生命周期
在前一种状况下,很是容易出现漏改的问题——由于须要改动的地方太多,有些应该改动的地方没有改动;在后一种状况下,很是容易出现误改的状况——由于被影响的效果太多,有些不应改动的地方跟着变了。class
不管出现那种情形,都会使得理解和改动设计变得困难。不过,只要在设计的时候秉持一些原则,这两种事情均可以获得有效的遏制。引用
DRY是“Don't Repeat Yourself”的缩写。意思是说,在一个设计里,对于任何东西,都应该有且只有一个表示,其它的地方都应该引用这一处。这样须要改动的时候,只需调整这一处,全部的地方就都变动过来了。di
运用DRY原则的时候,有一个很微妙的事情是要认真判别两样东西是不是一回事。有时候也有“两样东西如今碰巧看起来是同样的,可是并不能保证未来始终都同样”的状况。这种时候,极可能就有制造一点表面上的重复的必要了。工作
Shy不是任何东西的缩写。这里是取其字面意思,说系统的每一个部分都应该害羞一点,不要把只和本身有关的信息暴露给其它部分,同时也不要绝不客气的依赖太多的其它部分。这样一来,往后即可以放心的修改这些没变暴露的东西,也不用太过担忧本身依赖的东西发生了变化。ab
运用Shy原则的时候的主要挑战在于厘清哪些东西适合被作成系统里的独立单元。特别是肯定独立单元的大小。系统
DRY原则和Shy原则的目标是相同的,都是为了加强系统的可维护性。一个很好的遵循了DRY原则和Shy原则的系统,被称为具备“正交性”的系统。
DRY原则和Shy原则在某种程度上是不能兼得的:想要一个系统够DRY,就得尽可能把各部分里相同的东西分离出去放在一块儿,这不免就会致使不少部分都和分离出来的这些东西存在一些关系,从而不够Shy;想要一个系统够Shy,就得努力让各部分都作得和其它部分没有什么暧昧,这不免就会导致每一个部分里面都有一些原本能够共同使用的内容,从而不够DRY。
可是,实际须要的是能兼顾两条原则的设计。这就须要追求每条原则的时候都注意保持必定的分寸。