Saya mengerti apa yang seharusnya dicapai oleh SOLID dan menggunakannya secara teratur dalam situasi di mana modularitas penting dan tujuannya jelas berguna. Namun, dua hal mencegah saya menerapkannya secara konsisten di basis kode saya:
Saya ingin menghindari abstraksi dini. Dalam pengalaman saya menggambar garis abstraksi tanpa kasus penggunaan konkret (jenis yang ada sekarang atau di masa mendatang) menyebabkan mereka ditarik di tempat yang salah. Ketika saya mencoba mengubah kode semacam itu, garis abstraksi menghalangi dan bukannya membantu. Oleh karena itu, saya cenderung melakukan kesalahan dengan tidak menggambar garis abstraksi sampai saya memiliki ide yang bagus tentang di mana mereka akan berguna.
Saya merasa sulit untuk membenarkan peningkatan modularitas untuk kepentingannya sendiri jika itu membuat kode saya lebih bertele-tele, lebih sulit untuk dipahami, dll. Dan tidak menghilangkan duplikasi. Saya menemukan kode objek prosedural atau objek Tuhan yang sederhana, berpasangan ketat terkadang lebih mudah dipahami daripada kode ravioli yang sangat diperhitungkan dengan baik karena alirannya sederhana dan linier. Ini juga jauh lebih mudah untuk ditulis.
Di sisi lain, pola pikir ini sering mengarah pada objek-objek Tuhan. Saya biasanya memperbaiki ini secara konservatif, menambahkan garis abstraksi yang jelas hanya ketika saya melihat pola yang jelas muncul. Apa, jika ada, yang salah dengan objek-objek Tuhan dan kode yang digabungkan secara ketat jika Anda tidak jelas membutuhkan lebih banyak modularitas, tidak memiliki duplikasi yang signifikan dan kode tersebut dapat dibaca?
EDIT: Sejauh prinsip-prinsip SOLID individu, saya bermaksud untuk menekankan bahwa Pergantian Liskov adalah IMHO formalisasi akal sehat dan harus diterapkan di mana-mana, karena abstraksi tidak masuk akal jika tidak. Selain itu, setiap kelas harus memiliki tanggung jawab tunggal pada tingkat abstraksi tertentu, meskipun itu mungkin tingkat yang sangat tinggi dengan rincian implementasi semuanya dijejalkan ke dalam satu kelas 2.000 garis besar. Pada dasarnya, abstraksi Anda harus masuk akal di mana Anda memilih untuk abstrak. Prinsip-prinsip yang saya pertanyakan dalam kasus-kasus di mana modularitas tidak jelas berguna adalah open-closed, pemisahan antarmuka dan terutama inversi dependensi, karena ini adalah tentang modularitas, bukan hanya memiliki abstraksi yang masuk akal.