Tengo curiosidad por saber cuáles son los inconvenientes de usar el patrón ActiveRecord para el acceso a datos / objetos comerciales. Lo único que se me ocurre es que viola el Principio de Responsabilidad Única, pero el patrón AR es lo suficientemente común como para que esta razón por sí sola no parezca "lo suficientemente buena" como para justificar no usarla (por supuesto, mi la vista puede estar sesgada, ya que a menudo ninguno de los códigos con los que trabajo sigue ninguno de los principios SÓLIDOS).
Personalmente soy no un fan de ActiveRecord (con la excepción de escribir una aplicación Ruby on Rails, donde AR siente "natural") porque se siente como la clase está haciendo demasiado, y el acceso a datos no debería ser hasta la propia clase manejar. Prefiero utilizar repositorios que devuelven objetos comerciales. La mayor parte del código con el que trabajo tiende a usar una variación de ActiveRecord, en forma de (no sé por qué el método es 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;
}
}
o, a veces, la forma más "tradicional" de tener un public static Foo FindFooByID(int fooID)método para los buscadores y algo parecido public void Save()a guardar / actualizar.
Entiendo que ActiveRecord suele ser mucho más simple de implementar y usar, pero parece un poco demasiado simple para aplicaciones complejas y podría tener una arquitectura más robusta encapsulando su lógica de acceso a datos en un Repositorio (sin mencionar que es más fácil cambiarlo) estrategias de acceso a datos, por ejemplo, tal vez use Procs almacenados + conjuntos de datos y desee cambiar a LINQ o algo así)
Entonces, ¿cuáles son otros inconvenientes de este patrón que se deben considerar al decidir si ActiveRecord es el mejor candidato para el trabajo?