如果我一直遵循解耦,看起来DataAccess图层应该与模型解耦。但是然后将信息传递给数据访问层变得很麻烦......而不是:
void Save(myModel modelObject) {
//db.Save here
}
我会做
void Save(string objectprop1,objectprop2...) {
}
这不会破坏简单的目的吗?
我认为将模型传递给我的数据访问层是完全干净的代码,但它不会解耦。
答案 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是使用它们的后端实现。