[免责声明:这个问题是主观的,但我希望得到事实和/或反思的支持]
我认为每个人都知道“ 稳健性原则”,通常用Postel定律来总结:
保守发送的内容;在接受的内容上保持自由。
我同意,对于设计广泛的通信协议,这可能是有道理的(目的是允许轻松扩展),但是我一直认为,将其应用于HTML / CSS完全是失败的,每个浏览器都执行自己的无声调整检测/行为,几乎不可能在多个浏览器中获得一致的渲染。
我确实注意到,除非另有说明,否则TCP协议的RFC认为“ Silent Failure”是可以接受的……至少可以说这是一种有趣的行为。
在整个软件行业中,还有其他一些应用此原理的示例,这些示例经常出现,因为它们已经咬住了开发人员,从我的头顶开始:
- JavaScript分号插入
- C(静默)内置转换(如果不被截断的话,还算不错……)
并且有一些工具可以帮助实现“智能”行为:
- 名称匹配语音算法(Double Metaphone)
- 字符串距离算法(Levenshtein距离)
但是,我发现这种方法虽然在与非技术用户打交道或在错误恢复过程中帮助用户时可能会有所帮助,但在应用于库/类接口的设计时仍存在一些缺点:
- 该算法是否猜测“正确”在一定程度上是主观的,因此可能违反最小惊讶原则
- 它使实施更加困难,从而增加了引入错误的机会(违反YAGNI吗?)
- 它使行为更易于更改,因为对“猜测”例程的任何修改都可能破坏旧程序,几乎从一开始就排除了重构的可能性!
这就是导致我提出以下问题的原因:
在设计接口(库,类,消息)时,您是否倾向于健壮性原则?
我本人往往很严格,在我的界面上使用了广泛的输入验证,我想知道自己是否太严格了。