Sono curioso di sapere quali sono gli svantaggi dell'utilizzo del modello ActiveRecord per l'accesso ai dati / oggetti business. L'unico che mi viene in mente dalla parte superiore della mia testa è che viola il principio di responsabilità singola, ma il modello AR è abbastanza comune che questo motivo da solo non sembra "abbastanza buono" da giustificare il non utilizzo (ovviamente il mio la vista può essere distorta poiché spesso nessuno dei codici con cui lavoro segue nessuno dei principi SOLIDI).
Personalmente sono non un fan di ActiveRecord (con l'eccezione di scrivere un Ruby on Rails applicazione, dove AR sente "naturale"), perché ci si sente come la classe sta facendo troppo, e l'accesso ai dati non dovrebbe essere fino alla classe stessa gestire. Preferisco usare i repository che restituiscono oggetti business. La maggior parte del codice con cui lavoro tende a utilizzare una variante di ActiveRecord, sotto forma di (non so perché il metodo sia un valore booleano):
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;
}
}
o a volte il modo più "tradizionale" di avere un public static Foo FindFooByID(int fooID)
metodo per i cercatori e qualcosa sulla falsariga di public void Save()
salvare / aggiornare.
Capisco che ActiveRecord è in genere molto più semplice da implementare e utilizzare, ma sembra un po ' troppo semplice per applicazioni complesse e potresti avere un'architettura più robusta incapsulando la logica di accesso ai dati in un repository (per non parlare del fatto che è più facile sostituirlo strategie di accesso ai dati, ad es. forse usi Procs memorizzati + Set di dati e vuoi passare a LINQ o qualcosa del genere)
Quindi quali sono gli altri svantaggi di questo modello che dovrebbero essere considerati quando si decide se ActiveRecord è il miglior candidato per il lavoro?