[Penafian: pertanyaan ini subjektif, tapi saya lebih suka mendapatkan jawaban yang didukung oleh fakta dan / atau refleksi]
Saya pikir semua orang tahu tentang Prinsip Robustness , biasanya disimpulkan oleh Hukum Postel:
Bersikaplah konservatif dalam apa yang Anda kirim; menjadi liberal dalam apa yang Anda terima.
Saya setuju bahwa untuk desain protokol komunikasi yang luas ini mungkin masuk akal (dengan tujuan memungkinkan ekstensi mudah), namun saya selalu berpikir bahwa penerapannya pada HTML / CSS adalah kegagalan total, setiap browser menerapkan tweak diam sendiri deteksi / perilaku, membuatnya hampir tidak mungkin untuk mendapatkan rendering yang konsisten di beberapa browser.
Saya perhatikan bahwa ada RFC protokol TCP yang dianggap "Kegagalan Diam" dapat diterima kecuali ditentukan lain ... yang merupakan perilaku yang menarik, untuk sedikitnya.
Ada contoh lain dari penerapan prinsip ini di seluruh perdagangan perangkat lunak yang secara teratur muncul karena mereka telah menggigit pengembang, dari atas kepala saya:
- Penyisipan semi-kolon Javascript
- C (diam) konversi bawaan (yang tidak akan terlalu buruk jika tidak terpotong ...)
dan ada alat untuk membantu menerapkan perilaku "pintar":
- algoritma pencocokan nama fonetik ( Metafon Ganda )
- algoritma jarak string ( Levenshtein distance )
Namun saya menemukan bahwa pendekatan ini, walaupun mungkin bermanfaat ketika berhadapan dengan pengguna non-teknis atau untuk membantu pengguna dalam proses pemulihan kesalahan, memiliki beberapa kelemahan ketika diterapkan pada desain antarmuka perpustakaan / kelas:
- agak subyektif apakah algoritme menebak "benar", dan karena itu mungkin bertentangan dengan Prinsip Ketertinggalan Terkecil
- itu membuat implementasi lebih sulit, sehingga lebih banyak peluang untuk memperkenalkan bug (pelanggaran YAGNI ?)
- itu membuat perilaku lebih rentan terhadap perubahan, karena setiap modifikasi dari rutinitas "tebak" dapat merusak program lama, hampir tidak termasuk kemungkinan refactoring ... sejak awal!
Dan inilah yang membawa saya ke pertanyaan berikut:
Saat mendesain antarmuka (perpustakaan, kelas, pesan), apakah Anda condong ke arah prinsip kekokohan atau tidak?
Saya sendiri cenderung cukup ketat, menggunakan validasi input yang luas pada antarmuka saya, dan saya bertanya-tanya apakah saya mungkin terlalu ketat.