如果我一直遵循解耦,看起来 DataAccess 层应该与模型解耦。但是随后将信息传递给数据访问层变得很麻烦......而不是:
void Save(myModel modelObject) {
//db.Save here
}
我会做
void Save(string objectprop1,objectprop2...) {
}
这不会破坏简单的目的吗?
我认为将模型传递给我的数据访问层是非常干净的代码,但它并没有解耦。
如果我一直遵循解耦,看起来 DataAccess 层应该与模型解耦。但是随后将信息传递给数据访问层变得很麻烦......而不是:
void Save(myModel modelObject) {
//db.Save here
}
我会做
void Save(string objectprop1,objectprop2...) {
}
这不会破坏简单的目的吗?
我认为将模型传递给我的数据访问层是非常干净的代码,但它并没有解耦。
您的数据访问层当然应该了解您的域模型。您认为将它们分解为无数原始参数将是一件非常糟糕的事情,这是正确的。
解耦 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 是使用它们的后端实现。