ViewModel - >模型:谁负责持久性逻辑?

时间:2010-12-16 12:19:36

标签: asp.net-mvc-2 persistence repository viewmodel

在我的ASP MVC 2应用程序中,我遵循具有特定视图模型的强类型视图模式。

我的应用程序 viewmodels 负责 在模型和视图模型之间进行转换
我的viewmodels我有一个静态{{1函数,为相应的模型创建一个新的viewmodel。到目前为止,我很好。

当我想编辑模型时,我通过网络发送创建的视图模型并将更改应用回模型。为此,我使用静态ToViewModel(...)方法(也在视图模型中声明)。这里有用于澄清的存根:

ToModel(...)

所以,现在我的“问题”: 有些模型很复杂(不仅仅是字符串,整数,......)。所以持久性逻辑必须放在某处 。(使用持久性逻辑我的意思是 决定 来创建一个新的数据库条目,不仅仅是粗糙的CRUD - 我使用存储库来实现这一点)

我不认为将它放在我的存储库中是一个好主意,因为存储库(在我的理解中)不应该关注来自视图的东西。
我想把它放在{ {1}}方法,但我不确定这是否正确。

你能给我一个提示吗?

LG
warappa

2 个答案:

答案 0 :(得分:0)

Warappa - 我们同时使用存储库模式和视图模型。

但是,我们有两个额外的层:

  • 服务
  • 任务

服务层处理诸如持久关系数据(复杂对象模型)等内容。任务层处理数据的花哨linq关联以及所需的任何额外操作将正确的数据提供给viewmodel。

除了这个范围之外,我们每个实体还有一个'过滤器'类。这允许我们在需要时为每个类定位扩展方法。

简单......:)

答案 1 :(得分:0)

在我们的MVC项目中,我们为转换器提供了一个单独的位置。

我们有两种类型的转换器,一个IConverter和一个ITwoWayConverter(比它更多但我保持简单)。

ITwoWayConverter包含两个主要方法ConvertTo和ConvertFrom,其中包含将模型转换为视图模型的逻辑,反之亦然。

通过这种方式,您可以创建特定的转换,以便在不同类型之间切换,例如:

public class ProductToProductViewModelConverter : ITwoWayConverter<Product,ProductViewModel>

然后我们根据需要将相关的转换器注入我们的控制器。

这意味着您从一种类型转换为另一种类型不受单个转换器的限制(存储在模型内或任何地方)。