Ich interessiere mich dafür, ob das durch Ruby on Rails bekannte ActiveRecord- Muster die Verwendung von SOLID- Entwurfsprinzipien fördert oder davon abhält .
Zum Beispiel scheint es mir, dass ActiveRecord-Objekte sowohl Domänenlogik als auch Persistenzlogik enthalten, was eine Verletzung der Einzelverantwortung darstellt.
object-oriented
ruby-on-rails
nicholaides
quelle
quelle
Antworten:
Es gibt einige berechtigte Kritik an ActiveRecord. Wie immer fasst Onkel Bob es perfekt zusammen :
Wikipedia fasst die Kritik in einem Testbarkeitsproblem zusammen :
Speziell für die Ruby on Rails-Implementierung schreibt Gavin King (Hervorhebung von mir):
John Januszczak schreibt auch über die Implementierung von Ruby on Rails (Schwerpunkt Mine):
Ein paar weitere Ressourcen, warum ActiveRecord und ORM im Allgemeinen als Anti-Pattern angesehen werden:
ActiveRecord fühlte sich immer als äußerst nützliches Anti-Pattern an , aber ich stimme zu, dass es gegen SRP und zusätzlich gegen das Prinzip der Abhängigkeitsinversion verstößt.
quelle
(Ich gehe davon aus, dass die ActiveRecord-Klasse ohne Abhängigkeitsinjektionsmöglichkeit implementiert ist.)
Aus persönlicher Erfahrung kann ich sagen, dass das ActiveRecord-Muster ein Haupthindernis für das Schreiben von Unit-Tests darstellt. Die Kopplung der Persistenzschicht und der Geschäftslogik in einer einzigen "ActiveRecord-Klasse" macht es unmöglich, Komponententests zu schreiben (es sei denn, Sie überarbeiten zuerst). Daher besteht die einzige Option darin, Integrationstests zu schreiben. und das ist nicht so effektiv wie Unit-Tests. Dies ist besonders dann ein großes Problem, wenn Sie ein Projekt mit vielen ActiveRecord-Klassen übernehmen. Dies führt zu sehr komplizierten Integrationstests, die schwer zu warten sind.
Der ActiveRecord wirkt sich also ziemlich negativ auf SRP aus und verursacht einige Wartungsprobleme. es scheint die Macht zu nehmen, Unit-Tests zu schreiben.
quelle