1.1 如何使用此书
这里描述的许多设计原则都有些抽象,所以不看实际的代码可能很难理解。要找到小到足以列入书中,同时大到足以阐明真实系统问题的例子是一个挑战(如果你遇到好的例子,请把它们发给我)。因此,这本书本身可能不足以让你学会如何应用这些原则。
使用本书的最好方法是与代码审查相结合。当你阅读别人的代码时,想想它是否符合这里讨论的概念,以及这与代码的复杂性有什么关系。在别人的代码中看到设计问题比自己的代码更容易。你可以使用这里描述的危险信号来识别问题并提出改进建议。审查代码也会让你接触到新的设计方法和编程技术。
提高设计技能的最好方法之一是学会识别危险信号(red flag):表明一段代码可能比它需要的更复杂的迹象。在本书中,我将指出与每个主要设计问题相关的危险信号;最重要的危险信号将在书的后面总结出来。你可以在编码时使用这些:当你看到一个危险信号时,停下来,寻找一个可以消除问题的替代设计。当你第一次尝试这种方法时,你可能要尝试几个设计方案,才能找到一个能消除危险信号的方案。不要轻易放弃:在解决这个问题之前,你尝试的替代方案越多,你就会学到越多。随着时间的推移,你会发现你的代码中的危险信号越来越少,而你的设计也越来越干净了。你的经验也会让你看到其他的危险信号,你可以用它们来识别设计问题(我听到这些会很开心)。
在应用本书中的想法时,重要的是要做到适度和谨慎。每条规则都有其例外,每条原则都有其限度。如果你把任何一个设计理念发挥到极致,你最终可能会陷入糟糕的境地。美丽的设计反映了相互竞争的想法和方法之间的平衡。有几章中有标题为“走得太远”的小节,其中描述了如何识别你什么时候是在弄巧成拙。
本书中几乎所有的例子都是用Java或C++实现的,大部分的讨论都是在面向对象的语言中设计类。然而,这些想法也适用于其他领域。几乎所有与方法有关的思想也可以应用于没有面向对象特性的语言中的函数,如C语言。设计思想也适用于类以外的模块,如子系统或网络服务。
有了这样的背景,让我们开始更详细地讨论是什么导致了复杂性,以及如何使软件系统更简单。
Last updated