在面向对象的程序中:抽象多少太多了?多少钱是对的?
我一直都是一个坚定的人.我理解高级封装和抽象背后的概念,但总觉得增加太多只会混淆程序.
我总是试图拍摄一些没有空类或层的抽象.如果有疑问,我会尝试在现有图层中添加一些新图层,而不是在层次结构中添加新图层.
然而,最近我遇到了更多高度抽象的系统.系统中可能需要在层次结构中稍后表示的所有内容都可以预先获得.这导致了很多空层,起初看起来像是糟糕的设计.然而,第二个想法我已经意识到,留下那些空白的层将为你提供更多的地方,以便将来不需要太多的重构.它使你能够更好地在旧版本之上添加新功能,而无需做太多调整旧版本的工作.
这样做的两个风险似乎是你可以得到你需要错误的图层.在这种情况下,人们最终还是需要进行大量的重构来扩展代码,并且仍然会有大量未使用的层.但是,根据您花费多少时间进行初始抽象,将其搞砸的可能性,以及如果您做得对,可以节省的时间 - 可能仍然值得尝试.
我能想到的另一个风险是过度做的风险,从不需要所有额外的层.但那真的很糟糕吗?额外的类层真的如此昂贵,如果从未使用它们会有很大的损失吗?这里最大的费用和损失将是前面提到的层丢失的时间.但是,当人们可以使用抽象代码而不是更低级别的代码时,大部分时间仍然可以保存.
那么什么时候太多了?空白层和额外的"可能需要"抽象在什么时候变得有点过分?太少了?甜蜜点在哪里?
您在职业生涯中是否有任何可靠的经验法则可以帮助您判断所需的抽象量?