6.5 要问自己的问题
识别一个干净的通用类设计比创建一个更容易。下面是一些你可以问自己的问题,这将帮助你在接口的通用和专用之间找到适当的平衡。
可以满足我当前所有需求的最简单的接口是什么?如果你在不减少 API 整体功能的情况下减少 API 中的方法数量,那么你可能正在创建更通用的方法。专用的文本API至少有三种删除文本的方法:backspace
、delete
和deleteSelection
。更通用的API只有一个删除文本的方法,它可以满足所有三个目的。只有在每个方法的API保持简单的情况下,减少方法的数量才有意义;如果你为了减少方法的数量而不得不引入很多额外的参数,那么你可能就没有真正地让事情变得简单。
这个方法会在多少情况下被使用?如果一个方法是为某种特定用途而设计的,比如backspace
方法,这就是一个危险信号,说明它可能太过专用。看看你是否可以用一个通用方法来取代几个专用方法。
这个API对于我目前的需要来说是否容易使用?这个问题可以帮助你确定你在使API简化和通用化方面何时走得太远。如果你必须编写大量额外的代码才能将某个类用于当前目的,那么这是一个危险信号,说明这个接口没有提供正确的功能。例如,文本类的一个方法可能是围绕单字符操作来设计的:insert
插入单个字符,delete
删除单个字符。这种API既简单又具有通用性。然而,对于一个文本编辑器来说,它并不特别容易使用:高层代码将包含大量的循环来插入或删除一连串的字符。单字符的方法对于大型操作来说也是效率低下的。因此,对于文本类来说,最好是内置支持对某个范围内所有字符的操作。
Last updated