小到代码,大到模块、系统,我们都可以将其粗略的分为两个部分:变化的部分和不变的部分。有些代码,不管是维护人员来了、走了,还是版本换了、变了,它依然是那样。可怕的是另一部分,它们在不停的变化,每个新来的菜鸟都要去改一下,每个新的版本,它们都要动一下,总是让人头疼不已。更可怕的是变化的部分和不变的部分始终都纠结在一起,欲拆不能,强拆不忍,每次小小的改动都要牵连到一大片,修改这样的代码、模块,相当于将自己推入“焦油坑”,退拔皆不能,其中的痛苦只能敲掉门牙往肚里吞。
分离变与不变,是软件设计的一个基本原则。其背后蕴藏着丰富的软件工程思想,例如:信息的分装与隐藏、系统的模块化、使用分层构架等等等。其中“变”是指易变的代码或者模块,当然,“不变”就是指系统中不易变化的部分。无论是开发人员还是设计人员,使用这条原则,都可以带来可观的收益,且看以下两个本人体会到的实例。