在今天的编程中你看到的最糟糕的(由于流行程度或严重程度)抽象反转的例子是什么?
对于那些不熟悉这个概念的人来说,抽象反转是在高级构造之上实现低级构造.更确切地说,假设你有构造A和B.B是在A之上实现的,但A不会在任何地方暴露.因此,如果你真的需要较低级别的构造A,那么当B首先用A实现时,你最终会在B之上实现A. 见http://en.wikipedia.org/wiki/Abstraction_inversion.
可能是我见过的最糟糕的抽象滥用示例是这个流畅的C#,它在流畅的界面中包含了基本的流控制元素(if,whiles,Sequenced expressions).
所以你完美的惯用,干净的代码:
var selectedTextBox = (TextBox)sender, if (IsAdmin) { selectedTextBox.Enabled = true; selectedTextBox.Text = superSecretPassword; } else { selectedTextBox.Clear(); }
变成这个烂摊子:
Cast(sender). WithIf(IsAdmin, With(selectedTextBox => selectedTextBox.Enabled = true). With(selectedTextBox => selectedTextBox.Text = superSecretPassword), With(selectedTextBox => selectedTextBox.Clear());
因为lambdas的一切都更好!