读书人IT频道reader8.com/exam/jisuanji/ 如果我们预测到了这种变化,那么就可以设计一个抽象来隔离它。我们在前面的代码中所选定的抽象对于这种变化来说反倒成为一种障碍。可能你会觉得奇怪:还有什么比定义一个Shape类
读书人IT频道reader8.com/exam/jisuanji/ 如果我们预测到了这种变化,那么就可以设计一个抽象来隔离它。我们在前面的代码中所选定的抽象对于这种变化来说反倒成为一种障碍。可能你会觉得奇怪:还有什么比定义一个Shape类,并从它派生出Square类和Circle类更贴切的结构呢?为何这个贴切的模型不是最优的呢?很明显,这个模型对于一个形状的顺序比形状的类型具有更重要意义的系统来说,就不再是贴切的了。
这就导致了一个麻烦的结果,一般而言,无论模块是多么的“封闭”,都会存在一些无法对之封闭的变化。没有对于所有的情况都贴切的模型!考试吧祝各位2008年下半年全国计算机软件资格考试取得优异成绩!
既然不可能完全封闭,那么就必须有策略地对待这个问题。也就是说,设计人员必须对于他设计的模块应该对哪种变化封闭做出选择。他必须先猜测出最有可能发生的变化种类,然后构造抽象来隔离那些变化。
这需要设计人员具备一些从经验中能够获得的预测能力。有经验的设计人员希望自己对用户和应用领域很了解,能够以此来判断各种变化的可能性。然后,他可以让设计对于最有可能发生的变化遵循OCP原则。
这一点不容易做到。因为它意味着要根据经验猜测那些应用程序在生长历程中有可能遭受的变化。如果开发人员猜测正确,他们就获得成功。如果他们猜测错误,他们会遭受失败。并且在大多数情况下,他们都会猜测错误。
遵循OCP的代价也是昂贵的。创建适当的抽象是要花费开发时间和精力的。那些抽象也增加了软件设计的复杂性。开发人员有能力处理的抽象的数量也是有限的。考试,大提示我们希望把OCP的应用限定在可能会发生的变化上。
我们如何知道哪个变化有可能发生呢?我们进行适当的调查,提出正确的问题,并且使用我们的经验和一般常识。最终,我们会一直等到变化发生时才采取行动!
有句老话:“愚弄我一次,应感羞愧的是你。再次愚弄我,应感羞愧的是我。”这也是一种强有力的对待软件设计的态度。为了防止软件背负不必要的复杂性,我们会允许自己被愚弄一次。这意味着在我们最初编写代码时,假设变化不会发生。当变化发生时,我们就创建抽象来隔离以后发生的同类变化。简而言之,我们愿意被第一颗子弹击中,然后我们会确保自己不再被同一支枪发射的其他任何子弹击中。
如果我们决定接受第一颗子弹,那么子弹到来的越早、越快就对我们越有利。我们希望在开发工作展开不久就知道可能发生的变化。查明可能发生的变化所等待的时间越长,要创建正确的抽象就越困难。
因此,我们需要去刺激变化。
我们首先编写测试。测试描绘了系统的一种使用方法。通过首先编写测试,我们迫使系统成为可测试的。在一个具有可测试性的系统中发生变化时,我们可以坦然对之。因为我们已经构建了使系统可测试的抽象。并且通常这些抽象中的许多都会隔离以后发生的其他种类的变化。
我们使用很短的迭代周期进行开发:一个周期为几天而不是几周。
我们在加入基础设施前就开发特性,并且经常性地把那些特性展示给利益相关者。
我们首先开发最重要的特性。
我们尽早地、经常性地发布软件。我们尽可能快地、尽可能频繁地把软件展示给客户和使用人员。
这些就是原文的大部分内容,其他方面的话也不多说了,大家自己评判自己以前的设计是不是存在类似的情况?
注:OCP开放—封闭原则:软件实体(类、模块、函数等)应该是可以扩展的,但是不可修改。 读书人IT频道reader8.com/exam/jisuanji/