MVVM - 业务层映射在哪里?

时间:2014-08-25 12:49:42

标签: entity-framework mvvm architecture prism datamapper

我有一个解决方案,我需要 MAP 我的对象从模型(MVVM)到实体(EF),反之亦然。

现在,我正在View Model中进行MAPPING:

 Sistema.DataEntities.Models.Cliente clifinal = new Sistema.DataEntities.Models.Cliente();//EF Entities Model
 clifinal.InjectFrom<UnflatLoopValueInjection>(ObCliente);//convert View Model to EF
 _clienteService.ClienteService_Update(clifinal);//update on BLL(Service Layer)

正确的是在业务逻辑层上做到了吗?

如果我在BLL上这样做,这个层需要知道模型(MVVM),这对于体系结构来说不是一件好事,因为我正在使用PRISM 5和模块。

在此之后我创造了这个只是为了展示我眼中的正确建筑。

Layers of Project

我认为这是好方法......但是我非常依赖于所创建的依赖关系以及所有模式(PRISM)......在 MAPPING 的这一点上。 我在哪里做MAP?

1 个答案:

答案 0 :(得分:1)

由于ViewModel与业务层无关,而业务层不必了解ViewModel,因此应在模型层中(未)映射视图模型。

要从EF中删除依赖项,您必须做的是在单独的项目中定义实体。在你这样做:

  • 数据层EF将依赖于实体
  • 业务层将取决于实体
  • 模型将取决于实体

这些不是异常依赖。

为了获得更好的解耦,可以制作另一组业务层实体,独立于EF POCO。在那种情况下:

  • 数据层将取决于业务实体
  • 业务层自然会依赖于业务实体
  • 模型还取决于业务实体。
  • EF实体仅存在于EF图层

这是理想的decouplign,但它并不是免费的:你需要两个映射层。所以你必须在解耦去耦成本之间取得平衡。这取决于项目规模,预期维护量等等。

你可以混合使用它们:一些POCO也可以是商业实体,而其中一些不是。