【发布时间】:2011-02-09 17:36:58
【问题描述】:
在面向对象的程序中:多少抽象才算太多?多少才合适?
我一直是个不折不扣的人。我理解高级封装和抽象背后的概念,但总本能地觉得添加太多只会混淆程序。
我总是试图寻找一些不留空类或层的抽象。如果有疑问,我不会在层次结构中添加新层,而是尝试在现有层中添加一些东西。
但是,最近我遇到了更多高度抽象的系统。在层次结构中稍后可能需要表示的所有内容都在前面得到一个的系统。这会导致很多空层,乍一看似乎是糟糕的设计。然而,再想一想,我开始意识到,留下这些空层可以让你在未来有更多的地方可以挂钩,而无需进行太多重构。它使您能够在旧功能的基础上添加新功能,而无需做太多工作来调整旧功能。
这样做的两个风险似乎是您可能会错误地获取所需的层。在这种情况下,最终仍然需要进行大量重构来扩展代码,并且仍然会有大量从未使用过的层。但取决于您花多少时间提出最初的抽象,搞砸的可能性,以及如果你做对了以后可以节省的时间 - 可能仍然值得一试。
我能想到的另一个风险是过度执行并且永远不需要所有额外层的风险。但这真的有那么糟糕吗?额外的类层真的如此昂贵,以至于如果它们从未使用过会造成很大的损失吗?这里最大的费用和损失将是前期损失的时间。但是当人们可以使用抽象代码而不是更底层的代码时,大部分时间仍然可以节省下来。
那么什么时候过分呢?什么时候空层和额外的“可能需要”抽象变得过大了?太少有多少?甜蜜点在哪里?
在您的职业生涯中,您是否发现了任何可靠的经验法则来帮助您判断所需的抽象量?
【问题讨论】:
-
一根绳子有多长??? ;)
-
应该是 CW 恕我直言,因为它没有 an 答案
-
为什么 Java 应用与 C# 相比往往具有更多抽象?
-
@Goz 取决于语言,例如Pascal 说它确实有一个最大长度,但是聪明的 (c) 人们知道它没有。
-
太多的抽象是死亡行军的东西。我正在处理一个非常抽象的大型遗留应用程序,以至于当在界面上单击按钮时,它实际上需要几个小时才能找到执行的代码。这个应用程序以一种非常有害的方式结合了 WPF、依赖注入和模拟。过多的抽象是维护代码库的障碍。这是一个重要的话题,应该讨论。过多的抽象实际上会使优秀的公司和组织陷入废墟。这一点也不夸张。
标签: language-agnostic oop abstraction