在面向对象的程序中:抽象太多了?多少才对?
我一直都是个小人物。我了解高级封装和抽象背后的概念,但总是本能地认为添加太多内容只会使程序感到困惑。
我总是尝试拍摄一些抽象的东西,而没有留下任何空白的类或层。如有疑问,我将尝试在现有层中添加一些内容,而不是在层次结构中添加新层。
但是,最近我遇到了更多高度抽象的系统。一种系统,其中可能需要在层次结构中稍后进行表示的所有内容都预先放置了。这导致了很多空层,一开始似乎是不好的设计。但是,经过深思熟虑,我逐渐意识到,保留那些空的层将使您有更多的空间可以在将来使用而无需进行大量重构。它使您拥有了在旧功能之上添加新功能的更大能力,而无需进行几乎相同的调整旧功能。
这样做的两个风险似乎是您可能弄错了您需要的图层。在这种情况下,仍然需要进行大量的重构以扩展代码,并且仍然会有大量的未使用层。但是,取决于您花费多少时间来进行初始抽象,将其搞砸的机会以及如果正确就可以在以后节省的时间-仍然值得尝试。
我能想到的另一个风险是过度执行该风险而永远不需要所有额外层的风险。但这真的很糟糕吗?额外的类层真的那么贵吗,如果不使用它们,会造成很大的损失吗?这里最大的开销和损失将是时间,这些时间是与各个层一起预先损失的。但是,当人们可以使用抽象代码而不是更底层的代码时,大部分时间仍可以节省下来。
那么什么时候太多呢?在什么时候空层和多余的“可能需要”抽象变得过大?多少太少?最好的地方在哪里?
您在职业生涯中是否找到可靠的经验法则来帮助您判断所需的抽象量?