关于应用AutoMapper.EF6进行投影的MVVM项目,我很难分离数据访问和视图模型层的关注点,并在这些层之间保持依赖关系倒置。
假设我们有这些图层和类。
Models Layer:
Entity
IEntityDA
ViewModel Layer:
EntityVM
EntityFormVM<TEntityVM, TEntity>
DataAccess Layer:
EntityDA: (Inherits from IEntityDA<TEntity>)
现在,在EntityFormVM中,我从IEntityDA实例获取IQueriable,并将其投影到TEntityVM列表中,最后调用IEntityDA.Dispose()。通过这种方式,DA暴露了IQueriable!我不知道它是否正确!由于DA不知道工作何时完成,因此VM可以处理上下文!
另一方面,我有一些替代方案,比如反转DA和VM之间的依赖关系。因此,我将使用EntityDA将结果投影到TEntityVM并返回它们。但是,DA将取决于VM!
这里的最佳做法是什么?
首先,只要认识到IQueryable
是一个漏洞的抽象。为了有效地将其与您使用的任何ORM一起使用,您需要使用特定于ORM的扩展。
我的建议 - 不要担心这里的图层,你会想要在所有这些图层中垂直耦合一个请求。
问题已经通过这些模型对象分开。剩下的就是矫枉过正。