0

关于将 AutoMapper.EF6 用于投影的 MVVM 项目,我很难将数据访问层和视图模型层的关注点分开,并在这些层之间保持依赖关系反转。

假设我们有这些层和类。

Models Layer: 
    Entity
    IEntityDA

ViewModel Layer:
    EntityVM
    EntityFormVM<TEntityVM, TEntity>

DataAccess Layer: 
    EntityDA: (Inherits from IEntityDA<TEntity>)
 

现在,在 中EntityFormVM,我IQueryable<TEntity>从一个IEntityDA实例中获取一个,并将其投影到一个列表中TEntityVM,最后调用IEntityDA.Dispose(). 这样,DA就暴露了一个IQueryable!不知道对不对!VM 负责处理上下文,因为 DA 不知道工作何时完成!

另一方面,我有一些替代方案,例如反转 DA 和 VM 之间的依赖关系。因此,我将把EntityDA<TEntityVM, TEntity>结果投射到哪些项目中TEntityVM并返回它们。但是,DA 将取决于 VM!

这里的最佳做法是什么?

4

1 回答 1

1

首先,只要认识到这IQueryable是一个泄漏的抽象。为了有效地将它与您使用的任何 ORM 一起使用,您需要使用特定于 ORM 的扩展。

我的建议 - 不要担心这里的层,无论如何你都会希望在所有这些层中垂直耦合单个请求。

这些关注点已经通过这些模型对象分离。其余的都是多余的。

于 2018-01-04T04:31:07.283 回答