Sono curioso di sapere quali sono gli svantaggi dell'utilizzo del pattern ActiveRecord per l'accesso ai dati / oggetti business. L'unico che mi viene in mente è che viola il Principio di Responsabilità Unica, ma il pattern AR è abbastanza comune che questo motivo da solo non sembra "abbastanza buono" da giustificare il fatto di non usarlo (ovviamente il mio la vista può essere distorta poiché spesso nessuno del codice con cui lavoro segue qualsiasi dei principi SOLID).
Personalmente sono not un fan di ActiveRecord (con l'eccezione di scrivere un'applicazione Ruby on Rails, dove AR si sente "naturale") perché sembra che la classe stia facendo troppo e dati l'accesso non dovrebbe essere all'altezza della classe stessa da gestire. Preferisco usare i repository che restituiscono oggetti business. La maggior parte del codice con cui lavoro tende ad usare una variante di ActiveRecord, nella forma di (non so perché il metodo sia 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 talvolta il modo più "tradizionale" di avere un metodo public static Foo FindFooByID(int fooID)
per i finder e qualcosa sulla falsariga di public void Save()
per il salvataggio / l'aggiornamento.
Ho capito 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 tua logica di accesso ai dati in un repository (per non parlare del fatto che è più facile scambiare le strategie di accesso ai dati, ad esempio magari usi Processi memorizzati + DataSet e vuoi passare a LINQ o qualcosa di simile)
Quindi quali sono gli altri svantaggi di questo modello che dovrebbero essere considerati quando si decide se ActiveRecord è il miglior candidato per il lavoro?