Ich verstehe, was SOLID leisten soll, und verwende es regelmäßig in Situationen, in denen Modularität wichtig ist und die Ziele eindeutig nützlich sind. Zwei Dinge hindern mich jedoch daran, es konsistent auf meiner Codebasis anzuwenden:
Ich möchte eine vorzeitige Abstraktion vermeiden. Nach meiner Erfahrung führt das Zeichnen von Abstraktionslinien ohne konkrete Anwendungsfälle (wie sie jetzt oder in absehbarer Zukunft existieren) dazu, dass sie an den falschen Stellen gezeichnet werden. Wenn ich versuche, solchen Code zu ändern, stören die Abstraktionslinien eher, als dass sie helfen. Daher neige ich dazu, mich auf die Seite zu stellen, keine Abstraktionslinien zu zeichnen, bis ich eine gute Vorstellung davon habe, wo sie nützlich wären.
Ich finde es schwierig, eine Erhöhung der Modularität aus eigenen Gründen zu rechtfertigen, wenn dadurch mein Code ausführlicher, schwerer zu verstehen usw. wird und keine Duplikate beseitigt werden. Ich finde, dass einfacher, eng gekoppelter prozeduraler oder Gott-Objekt-Code manchmal leichter zu verstehen ist als Ravioli-Code mit sehr guten Faktoren, da der Ablauf einfach und linear ist. Es ist auch viel einfacher zu schreiben.
Andererseits führt diese Denkweise oft zu Gegenständen Gottes. Ich überarbeite diese im Allgemeinen konservativ und füge nur dann klare Abstraktionslinien hinzu, wenn sich klare Muster abzeichnen. Was ist, wenn überhaupt, mit Gottobjekten und eng gekoppeltem Code falsch, wenn Sie nicht eindeutig mehr Modularität benötigen, keine signifikanten Duplikate haben und der Code lesbar ist?
EDIT: In Bezug auf einzelne SOLID-Prinzipien wollte ich betonen, dass die Liskov-Substitution meiner Meinung nach eine Formalisierung des gesunden Menschenverstands ist und überall angewendet werden sollte, da Abstraktionen keinen Sinn ergeben, wenn dies nicht der Fall ist. Außerdem sollte jede Klasse auf einer bestimmten Abstraktionsebene eine einzelne Verantwortung haben, auch wenn die Implementierungsdetails auf einer sehr hohen Ebene liegen, die alle zu einer riesigen Klasse mit 2.000 Zeilen zusammengefasst sind. Grundsätzlich sollten Ihre Abstraktionen dort Sinn machen, wo Sie sich für eine Abstraktion entscheiden. Die Prinzipien, die ich in Fällen, in denen Modularität nicht eindeutig nützlich ist, in Frage stelle, sind Open-Closed, Schnittstellentrennung und insbesondere Abhängigkeitsinversion, da es um Modularität geht und nicht nur Abstraktionen Sinn machen.