模块设计的两个方式:模块设计的更通用、模块设计的更专用。
通用模块能够解决更多的问题,也许以后做功能扩展时能够用上,但是通用模块设计比较困难,有可能会过渡设计,所以一部分支持专用设计,如果后续需要支持其他特性,可以把这个模块再重构,然后使得它变得更通用一点。
作者的建议是在设计时,模块要较通用,即:要完成功能,但是接口不一定要,接口可以设计的较通用一点,来支持较多的功能。较指没必要把模块设计的非常通用。
专用的设计:比如删除,提供两个接口,删除字符、删除范围
delete(Cursor cursor)、deleteSelection(Selection selection)
其他的每个操作都提供一个接口,比如换行、复制等,这样设计很专用,但是这种方式不好,提高其他模块的认知负担。
通用的实际,删除提供一个接口,接口中包括start、end两个位置来标明要删除的范围
delete(Position start, Position end)。
换行或者跳转提供change(Position start, Position end)接口
后者比前者更清晰,也更通用
识别出好的设计比自己给出好的设计要简单。
怎样用最简单的接口实现所有的功能?比如在不减少功能的情况下,能够减少接口数量,那么就是更通用的设计。但是如果为了减少接口数量,但是增加了接口参数,这不一定好。(没调用一个方法,必须仔细查看这个方法才有信心正确使用这个方法,这不好)
每个接口的使用场景是否频繁?能否将某些不太使用的专用接口转换成更通用的接口
对于当前的需求,目前的API是否足够简单?这个问题能够避免过度设计,使得方法太通用,