在面向对象程序中: 多少抽象是太多? 多少才是恰到好处?
我一直都是那种有条有理的人。我理解高级封装和抽象背后的概念,但总是本能地认为添加太多内容只会混淆程序。
我总是试图争取一定量的抽象,不留下任何空的类或层。有疑问的地方,我不会在层次结构中添加一个新的层,而是尝试在现有的层中添加一些内容。
然而,最近我遇到了更多高度抽象的系统。在系统中,层次结构中稍后可能需要表示的所有内容都会提前获得一个表示。这导致了大量的空白层,这在一开始看起来像是糟糕的设计。然而,转念一想,我已经意识到,留下这些空白的图层,将来不需要进行太多的重构,就可以有更多的地方可以连接。它使您能够在旧版本的基础上添加新功能,而不需要做太多的工作来调整旧版本。
这样做的两个风险似乎是你可能会得到你需要的层次错误。在这种情况下,最终仍然需要进行大量的重构来扩展代码,并且仍然有大量从未使用过的层。但是,这取决于你花费了多少时间来完成最初的抽象,搞砸它的可能性,以及如果你做对了以后可以节省的时间——这可能仍然值得一试。
我能想到的另一个风险是过度使用,而且永远不需要所有额外的图层。但这真的有那么糟吗?额外的类层真的如此昂贵,以至于如果它们从未被使用,那么它们就是一个巨大的损失吗?这里最大的费用和损失将是时间,这是失去了前来与层。但是,当可以使用抽象代码而不是更低级的代码时,这些时间中的大部分仍然可以节省。
那什么时候才算过分呢?在什么情况下,空层和额外的“可能需要”抽象会变得过度?多少才算太少?最佳位置在哪里?
在你的职业生涯中,有没有什么可靠的经验法则可以帮助你判断所需要的抽象程度?