Я розумію, що SOLID повинен виконувати і використовувати його регулярно в ситуаціях, коли модульність важлива і цілі її явно корисні. Однак дві речі заважають мені послідовно застосовувати його в моїй кодовій базі:
Хочу уникнути передчасного абстрагування. З мого досвіду, малювання абстракційних ліній без конкретних випадків використання (таких, які існують зараз або в осяжному майбутньому) призводить до того, що вони малюються в неправильних місцях. Коли я намагаюся змінити такий код, лінії абстрагування заважають, а не допомагають. Тому я схильний помилятися на тому, що не малюю жодних абстракційних ліній, поки не буду добре уявляти, де вони були б корисні.
Мені важко виправдати посилення модульності заради себе, якщо це робить мій код більш багатослівним, складнішим для розуміння тощо і не усуває жодного дублювання. Я вважаю, що простий, щільно пов'язаний процедурний або боговий об'єктний код іноді простіше зрозуміти, ніж дуже добре розроблений код равіолі, оскільки потік простий і лінійний. Так само набагато простіше писати.
З іншого боку, такий спосіб мислення часто призводить до об'єктів Бога. Я, як правило, реконструюю це консервативно, додаючи чіткі лінії абстракції лише тоді, коли бачу чіткі закономірності. Що, якщо що, не так з об'єктами Бога і щільно зв'язаний код, якщо вам явно не потрібна більше модульність, не маєте значного дублювання і код читається?
EDIT: Що стосується окремих принципів SOLID, я мав наголосити, що Заміна Ліскова - це ІМХО - формалізація здорового глузду, і його слід застосовувати всюди, оскільки абстракції не мають сенсу, якщо це не так. Крім того, кожен клас повинен нести єдину відповідальність на певному рівні абстракції, хоча це може бути дуже високий рівень з деталями реалізації, всі вони набиті на один величезний клас 2000 ліній. В основному, ваші абстракції повинні мати сенс, де ви вирішите зробити конспект. Принципи, які я сумніваюсь у випадках, коли модульність не є однозначно корисною, є відкрита-закрита, сегрегація інтерфейсу і особливо інверсія залежності, оскільки мова йде про модульність, а не просто абстрагування має сенс.