Je suis intéressé à savoir si le modèle ActiveRecord, rendu célèbre par Ruby on Rails, encourage ou décourage l'utilisation des principes de conception SOLID .
Par exemple, il me semble que les objets ActiveRecord contiennent à la fois une logique de domaine et une logique de persistance, ce qui constitue une violation de la responsabilité unique.
object-oriented
ruby-on-rails
Nicholaides
la source
la source
Réponses:
Il y a des critiques valables sur ActiveRecord. Comme toujours, oncle Bob le résume parfaitement :
Wikipedia résume la critique dans un souci de testabilité :
En ce qui concerne Ruby on Rails, Gavin King écrit :
Toujours sur l'implémentation de Ruby on Rails, John Januszczak écrit :
Quelques ressources supplémentaires expliquant pourquoi ActiveRecord et ORM sont généralement considérés comme des anti-modèles:
ActiveRecord a toujours été perçu comme un anti-motif extrêmement utile , mais je conviens que cela va à l’encontre du SRP et du principe de l’inversion de dépendance.
la source
(Je suppose que la classe ActiveRecord est implémentée sans aucune possibilité d'injection de dépendance).
D'après mon expérience personnelle, le modèle ActiveRecord devient un obstacle majeur à la rédaction de tests unitaires. Le couplage de la couche de persistance et de la logique métier dans une même "classe ActiveRecord" rend impossible l'écriture de tests unitaires (à moins que vous ne refactoriez d'abord). Par conséquent, la seule option est d'écrire des tests d'intégration. et ce n'est pas aussi efficace que les tests unitaires. Cela devient un problème majeur, surtout si vous prenez en charge un projet comportant de nombreuses classes ActiveRecord; il donne lieu à des tests d'intégration extrêmement compliqués et difficiles à gérer.
Ainsi, ActiveRecord s’applique à peu près à SRP et crée un casse-tête de maintenance; il semble supprimer le pouvoir d'écrire des tests unitaires.
la source