Estou interessado em saber se o padrão ActiveRecord, popularizado pelo Ruby on Rails, incentiva ou desencoraja o uso dos princípios de design do SOLID .
Por exemplo, parece-me que os objetos ActiveRecord contêm lógica de domínio e lógica de persistência, o que é uma violação da responsabilidade única.
object-oriented
ruby-on-rails
nicholaides
fonte
fonte
Respostas:
Há algumas críticas válidas no ActiveRecord. Como sempre, o tio Bob resume perfeitamente :
A Wikipedia resume as críticas em uma preocupação de testabilidade :
Especificamente para a implementação do Ruby on Rails, Gavin King escreve (ênfase minha):
Também na implementação do Ruby on Rails, John Januszczak escreve (ênfase minha):
Mais alguns recursos sobre por que o ActiveRecord e o ORM geralmente são considerados um antipadrão:
O ActiveRecord sempre pareceu um anti-padrão extremamente útil , mas eu concordo que ele vai contra o SRP e, adicionalmente, contra o princípio da inversão de dependência.
fonte
(Suponho que a classe ActiveRecord seja implementada sem nenhuma possibilidade de injeção de dependência).
Por experiência pessoal, posso dizer que o padrão ActiveRecord se torna um grande obstáculo para escrever testes de unidade. O acoplamento da camada de persistência e da lógica de negócios em uma única "classe ActiveRecord" torna impossível a gravação de testes de unidade (a menos que você refatore primeiro). Portanto, a única opção é escrever testes de integração; e isso não é tão eficaz quanto os testes de unidade. Isso se torna um problema importante, especialmente se você assumir um projeto com muitas classes do ActiveRecord; ele produz testes de integração altamente complicados e difíceis de manter.
Portanto, o ActiveRecord vem praticamente contra o SRP e cria alguma dor de cabeça na manutenção; parece tirar o poder de escrever testes de unidade.
fonte