MVC asp.net - 数据访问层应该与域模型分离吗?

时间:2011-11-15 00:10:45

标签: asp.net-mvc-3 decoupling

如果我一直遵循解耦,看起来DataAccess图层应该与模型解耦。但是然后将信息传递给数据访问层变得很麻烦......而不是:

void Save(myModel modelObject) {
//db.Save here
}

我会做

void Save(string objectprop1,objectprop2...) {
}

这不会破坏简单的目的吗?

我认为将模型传递给我的数据访问层是完全干净的代码,但它不会解耦。

1 个答案:

答案 0 :(得分:3)

您的数据访问层当然应该了解您的域模型。你认为将它们分成无数原始论点是正确的。

解耦DAL并不意味着从DAL中删除模型的依赖关系,而是从模型中删除DAL的依赖关系。例如,DAL可以通过简单的存储库来表示:

interface Repository<TModel> where TModel : BaseModel
{
    TModel Get(int id);
    IEnumerable<Tmodel> Get();
    void Delete(int id);
    TModel Save(TModel model);
}

或者那种性质,有很多方法可以设计它。这里的想法是,DAL可以自由地存储与模型所代表的结构不同的结构。但从模型的角度来看,它们只是坚持存储库。实际的数据持久性可能是一个不同的表结构(例如,优化数据库的性能,而不必将业务模型更改为副作用),甚至完全在多个数据库中。

DAL了解域模型没有任何问题。实际上,作为该领域的一部分,DAL有望了解它。模型是核心,DAL是使用它们的后端实现。