我很好奇将ActiveRecord模式用于数据访问/业务对象的缺点是什么。我能想到的唯一一个就是违反了单一责任原则,但是AR模式很常见,以至于仅凭这个原因似乎不足以证明不使用它(当然,视图可能会偏斜,因为我使用的代码通常都没有遵循任何 SOLID原则)。
我个人不是 ActiveRecord的粉丝(除了编写Ruby on Rails应用程序,AR感觉很“自然”),因为我觉得类做得太多,并且数据访问不应该取决于类本身处理。我更喜欢使用返回业务对象的存储库。我使用的大多数代码都倾向于使用ActiveRecord的变体,形式为(我不知道为什么该方法是布尔值):
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;
}
}
或有时更“传统”的方式public static Foo FindFooByID(int fooID)
为发现者提供一种方法,以及类似的东西public void Save()
来保存/更新。
我得到的ActiveRecord通常要简单得多实施和使用,但它似乎有点太简单了复杂的应用程序,你可以通过在库(封装数据访问逻辑有一个更强有力的架构更何况有很容易掉出来数据访问策略,例如,您可能使用存储的Procs +数据集并想要切换到LINQ或其他功能)
那么,在确定ActiveRecord是否是该职位的最佳候选人时,应考虑此模式的其他缺点吗?