[Відмова від відповідальності: це питання є суб'єктивним, але я вважаю за краще отримати відповіді, підкріплені фактами та / або рефлексіями]
Я думаю, що всі знають про Принцип стійкості , зазвичай підсумований Законом Постела:
Будьте консервативними в тому, що ви надсилаєте; будьте ліберальні в тому, що приймаєте.
Я погодився б, що для розробки широкомасштабного протоколу зв'язку це може мати сенс (з метою легкого розширення), однак я завжди вважав, що його застосування до HTML / CSS було цілковитою помилкою, кожен браузер реалізував власну безшумну настройку виявлення / поведінку, що робить неможливим отримання послідовного візуалізації у кількох браузерах.
Я помічаю, хоча там RFC протоколу TCP вважає "мовчазною відмову" прийнятною, якщо не вказано інше ... що, по крайней мере, є цікавою поведінкою.
Є й інші приклади застосування цього принципу у всій торгівлі програмним забезпеченням, які регулярно спливають, оскільки вони кусали розробників, зверху в мене:
- Вставка ядра в напів двокрапку
- C (мовчазний) вбудований перехід (що було б не так вже й погано, якби він не врізався ...)
і є інструменти, які допоможуть реалізувати "розумну" поведінку:
- фонетичні алгоритми, що відповідають іменам ( Double Metaphone )
- алгоритми дистанції рядків ( відстань Левенштейна )
Однак я вважаю, що цей підхід, хоча може бути корисним при роботі з нетехнічними користувачами або допомагати користувачам у процесі відновлення помилок, має деякі недоліки при застосуванні до дизайну інтерфейсу бібліотеки / класів:
- це дещо суб'єктивно, чи алгоритм вважає "правильним", і, таким чином, це може суперечити Принципу найменшого здивування
- це ускладнює реалізацію, таким чином, більше шансів ввести помилки (порушення YAGNI ?)
- це робить поведінку більш сприйнятливою до змін, оскільки будь-яка модифікація режиму "здогадки" може порушити старі програми, майже виключаючи можливості рефакторингу ... з самого початку!
І саме це спричинило мене до наступного питання:
Створюючи інтерфейс (бібліотека, клас, повідомлення), ви схиляєтесь до принципу надійності чи ні?
Я сам схильний бути досить суворим, використовуючи обширну перевірку вхідних даних на своїх інтерфейсах, і мені було цікаво, чи я, можливо, занадто суворий.