作为一名设计师,我喜欢提供满足功率/简单性平衡的界面。例如,我认为 LINQ 设计者遵循了这一原则,因为他们提供了点表示法和查询表示法。第一个功能更强大,但第二个更易于阅读和遵循。如果您不同意我对 LINQ 的评估,请尝试理解我的观点;LINQ 只是一个例子,我的帖子不是关于 LINQ。
我把这个原则称为“可拨号电源”。但我想知道其他人怎么称呼它。当然有些人会说“KISS”是常用词。但我认为 KISS 是一种超集,或一种“消费主义”实践。再次使用 LINQ 作为我的示例,在我看来,一个总是尝试使用查询表示法而不是点表示法的程序员团队正在练习 KISS。因此,LINQ 设计者实践了“可拨号电源”,而 LINQ 消费者实践了 KISS。两人一起创作美妙的音乐。
编辑我再举一个例子。想象一个日志工具有两个签名,允许两种用途:
void Write(string message);
void Write(Func<string> messageCallback);
这两个签名的目的是满足这些需求:
//Every-day "simple" usage, nothing special.
myLogger.Write("Something Happened" + error.ToString() );
//This is performance critical, do not call ToString() if logging is
//disabled.
myLogger.Write( () => { "Something Happened" + error.ToString() });
拥有这些重载代表“可拨号能力”,因为消费者可以选择简单接口或功能强大的接口。喜欢 KISS 的消费者大部分时间会使用更简单的签名,并在需要电源时允许看起来“忙碌”的签名。这也有助于自我记录,因为使用强大的签名会告诉读者代码对性能至关重要。如果记录器只有强大的签名,那么就没有“可拨电源”。
所以这是一个完整的循环。如果尚不存在的话,我很乐意保留我自己的“可拨号电源”造币,但我不禁认为我错过了这种做法的明显名称。
ps 另一个相关但与“可拨号电源”不同的例子是 Scott Meyer 的原则“使接口易于正确使用,而难以错误使用”。