Je suis curieux de savoir quels sont les inconvénients de l'utilisation du modèle ActiveRecord pour l'accès aux données / les objets métier. La seule à laquelle je peux penser du haut de ma tête est qu'elle viole le principe de responsabilité unique, mais le modèle de RA est assez commun pour que cette raison seule ne semble pas "assez bonne" pour justifier de ne pas l'utiliser (bien sûr, mon La vue peut être biaisée car souvent aucun du code avec lequel je travaille ne suit les principes SOLID).
Personnellement, je ne suis pas un fan d'ActiveRecord (à l'exception de l'écriture d'une application Ruby on Rails, où AR semble "naturel"), car on a l'impression que la classe en fait trop, et l'accès aux données ne devrait pas être réservé à la classe elle-même gérer. Je préfère utiliser des référentiels qui renvoient des objets métier. La plupart du code avec lequel je travaille a tendance à utiliser une variante d'ActiveRecord, sous la forme (je ne sais pas pourquoi la méthode est booléenne):
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;
}
}
ou parfois la manière la plus "traditionnelle" d'avoir une public static Foo FindFooByID(int fooID)
méthode pour les chercheurs et quelque chose dans le sens de la public void Save()
sauvegarde / mise à jour.
J'obtiens qu'ActiveRecord est généralement beaucoup plus simple à implémenter et à utiliser, mais cela semble un peu trop simple pour les applications complexes et vous pourriez avoir une architecture plus robuste en encapsulant votre logique d'accès aux données dans un référentiel (sans parler d'avoir plus facile à échanger) stratégies d'accès aux données, par exemple, vous utilisez peut-être des processus stockés + des ensembles de données et souhaitez passer à LINQ ou quelque chose du genre)
Quels sont donc les autres inconvénients de ce modèle qui doivent être pris en compte pour décider si ActiveRecord est le meilleur candidat pour le travail?