Ich bin gespannt, welche Nachteile die Verwendung des ActiveRecord-Musters für Datenzugriffs- / Geschäftsobjekte hat. Das Einzige, woran ich auf Anhieb denken kann, ist, dass es gegen das Prinzip der einfachen Verantwortung verstößt, aber das AR-Muster ist weit genug verbreitet, dass dieser Grund alleine nicht "gut genug" zu sein scheint, um es zu rechtfertigen, es nicht zu verwenden (natürlich mein Die Ansicht kann verzerrt sein, da häufig keiner der Codes, mit denen ich arbeite, einem der SOLID-Prinzipien folgt .
Persönlich bin ich kein Fan von ActiveRecord (mit Ausnahme des Schreibens einer Ruby on Rails-Anwendung, bei der AR sich "natürlich" anfühlt), weil die Klasse zu viel tut und der Datenzugriff nicht der Klasse selbst überlassen bleiben sollte zu handhaben. Ich bevorzuge die Verwendung von Repositorys, die Geschäftsobjekte zurückgeben. Der Großteil des Codes, mit dem ich arbeite, verwendet in der Regel eine Variante von ActiveRecord in Form von (ich weiß nicht, warum die Methode ein Boolescher Wert ist):
public class Foo
{
// properties...
public Foo(int fooID)
{
this.fooID = fooID;
}
public bool Load()
{
// DB stuff here...
// map DataReader to properties...
bool returnCode = false;
if (dr.HasRows)
returnCode = true;
return returnCode;
}
}
oder manchmal die "traditionellere" Art, eine public static Foo FindFooByID(int fooID)
Methode für die Finder und etwas in der Art des public void Save()
Speicherns / Aktualisierens zu haben.
Ich verstehe, dass ActiveRecord in der Regel viel einfacher zu implementieren und zu verwenden ist, aber für komplexe Anwendungen etwas zu einfach erscheint und Sie eine robustere Architektur haben könnten, indem Sie Ihre Datenzugriffslogik in einem Repository kapseln (ganz zu schweigen davon, dass es einfacher ist, sie auszutauschen) Datenzugriffsstrategien (z. B. verwenden Sie Stored Procs + DataSets und möchten zu LINQ wechseln oder so)
Was sind weitere Nachteile dieses Musters, die bei der Entscheidung, ob ActiveRecord der beste Kandidat für den Job ist, berücksichtigt werden sollten?