Ciekawe, jakie są wady używania wzorca ActiveRecord do dostępu do danych / obiektów biznesowych. Jedyne, co mogę wymyślić z góry, to to, że narusza zasadę pojedynczej odpowiedzialności, ale wzorzec AR jest na tyle powszechny, że sam ten powód nie wydaje się „wystarczająco dobry”, aby uzasadnić nieużywanie go (oczywiście moje widok może być wypaczony, ponieważ często żaden kod, z którym pracuję, nie jest zgodny z żadną z zasad SOLID).
Ja osobiście nie fanem ActiveRecord (z wyjątkiem pisania Ruby on Rails aplikacji, gdzie AR czuje się „naturalne”), ponieważ czuje się jak w klasie robi zbyt wiele, a dostęp do danych nie powinien być aż do samej klasie Poradzić sobie. Wolę używać repozytoriów, które zwracają obiekty biznesowe. Większość kodu, z którym pracuję, ma tendencję do używania odmiany ActiveRecord w postaci (nie wiem, dlaczego metoda jest wartością logiczną):
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;
}
}
lub czasami bardziej „tradycyjny” sposób posiadania public static Foo FindFooByID(int fooID)
metody dla wyszukiwarek i coś podobnego public void Save()
do zapisywania / aktualizacji.
Rozumiem, że ActiveRecord jest zwykle o wiele prostszy we wdrożeniu i użyciu, ale wydaje się nieco zbyt prosty w przypadku złożonych aplikacji i możesz mieć bardziej solidną architekturę, zamykając logikę dostępu do danych w repozytorium (nie wspominając o łatwiejszej wymianie strategie dostępu do danych, np. może korzystasz z Przechowanych Procs + DataSets i chcesz przejść na LINQ lub coś takiego)
Jakie więc są inne wady tego wzorca, które należy wziąć pod uwagę przy podejmowaniu decyzji, czy ActiveRecord jest najlepszym kandydatem do pracy?