Me interesa saber si el patrón ActiveRecord, famoso por Ruby on Rails, fomenta o desalienta el uso de principios de diseño SOLID .
Por ejemplo, me parece que los objetos ActiveRecord contienen lógica de dominio y lógica de persistencia, lo cual es una violación de la responsabilidad única.
object-oriented
ruby-on-rails
Nicholaides
fuente
fuente
Respuestas:
Hay algunas críticas válidas en ActiveRecord. Como siempre, el tío Bob lo resume perfectamente :
Wikipedia resume las críticas en una preocupación de comprobabilidad :
Específicamente para la implementación de Ruby on Rails, Gavin King escribe (el énfasis es mío):
También en la implementación de Ruby on Rails, John Januszczak escribe (el énfasis es mío):
Algunos recursos más sobre por qué ActiveRecord y ORM generalmente se consideran un antipatrón:
ActiveRecord siempre se sintió como un anti-patrón extremadamente útil , pero estoy de acuerdo en que va en contra de SRP y, además, va en contra del principio de inversión de dependencia.
fuente
(Supongo que la clase ActiveRecord se implementa sin ninguna posibilidad de inyección de dependencia).
Por experiencia personal, puedo decir que el patrón ActiveRecord se convierte en un obstáculo importante para escribir pruebas unitarias. El acoplamiento de la capa de persistencia y la lógica de negocios en una sola "clase ActiveRecord" hace que sea imposible escribir pruebas unitarias (a menos que refactorice primero). Por lo tanto, la única opción es escribir pruebas de integración; y eso no es tan efectivo como las pruebas unitarias. Esto se convierte en un problema importante, especialmente si se hace cargo de un proyecto con muchas clases de ActiveRecord; da lugar a pruebas de integración altamente complicadas que son difíciles de mantener.
Por lo tanto, el ActiveRecord viene bastante en contra de SRP y crea un dolor de cabeza de mantenimiento; parece quitarle el poder de escribir pruebas unitarias.
fuente