Estou curioso para saber quais são as desvantagens de usar o padrão ActiveRecord para acessar dados / objetos de negócios. A única coisa em que consigo pensar é que viola o Princípio da Responsabilidade Única, mas o padrão de RA é comum o suficiente para que esse motivo por si só não pareça "bom o suficiente" para justificar não usá-lo (é claro, meu A visualização pode ser distorcida, pois muitas vezes nenhum código com o qual trabalho segue nenhum dos princípios do SOLID).
Pessoalmente, eu não sou fã do ActiveRecord (com exceção de escrever um aplicativo Ruby on Rails, onde o AR parece "natural") porque parece que a classe está fazendo muito e o acesso a dados não deve depender da própria classe lidar. Prefiro usar Repositórios que retornam objetos de negócios. A maior parte do código com o qual trabalho tende a usar uma variação do ActiveRecord, na forma de (não sei por que o método é 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;
}
}
ou, às vezes, a maneira mais "tradicional" de ter um public static Foo FindFooByID(int fooID)
método para os buscadores e algo semelhante ao de public void Save()
salvar / atualizar.
Entendo que o ActiveRecord normalmente é muito mais simples de implementar e usar, mas parece um pouco simples demais para aplicativos complexos e você pode ter uma arquitetura mais robusta encapsulando sua lógica de acesso a dados em um Repositório (sem mencionar que é mais fácil trocar estratégias de acesso a dados, por exemplo, talvez você use Procs armazenados + DataSets e queira mudar para LINQ ou algo assim)
Então, quais são as outras desvantagens desse padrão que devem ser consideradas ao decidir se o ActiveRecord é o melhor candidato para o trabalho?