关于将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!
这里的最佳做法是什么?
答案 0 :(得分:1)
首先,只要认识到embeddedElastic = EmbeddedElastic.builder()
.withElasticVersion(Version.CURRENT.number())
.withSetting(PopularProperties.CLUSTER_NAME, CLUSTER_NAME)
.withSetting(PopularProperties.TRANSPORT_TCP_PORT, transportTcpPort)
.withIndex(INDEX_NAME, IndexSettings.builder()
.withSettings(getClass().getResourceAsStream("settings-mappings.json"))
.build())
.build()
.start();
是一个漏洞的抽象。为了在您使用的任何ORM中有效地使用它,您需要使用特定于ORM的扩展。
我的建议 - 不要担心这里的图层,你会想要在所有这些图层中为一个请求垂直耦合。
问题已经通过这些模型对象分开了。剩下的就是矫枉过正。