0

希望我在这里很清楚。我有一个名为A. 我有一个名为M. 我有一个模型存储库M和它映射到的数据库内容RM

我的 ViewModel,A是否有我的 Model 的属性和M我的 Repository的属性RM

然后,我将通过调用各种方法来使用它RM并绑定到M它们,我将传递给RMlike中的某些方法Save()

说得通?那是“正常”还是接近?

4

2 回答 2

1

根据您的喜好,您可以描述一种典型的情况。如果您的视图模型希望使用实体,那么它可以通过存储库来实现,您可以使用构造函数注入作为依赖项注入该存储库,并且您的视图模型可以针对抽象而不是存储库的特定实现工作。

如果您希望在构建后稍后访问存储库,那么您可以将存储库分配给私有字段或属性。

就您的模型而言,您可以拥有一个将其公开给视图的属性,这样您就不需要在视图模型上复制模型的属性。但是,这取决于您是否对直接访问模型的视图感到满意,这可能违反了 LoD(德米特法则),以免违反 DRY(不要重复自己)原则。

于 2013-05-09T16:46:40.827 回答
0

一种方法是从视图模型中公开 M 类型的属性,就像您目前所拥有的一样。然后视图将绑定到这个暴露模型的属性。在您的视图模型上公开一个名为 Save 的方法,您的视图将在单击按钮时调用此方法(如果您使用的是 WPF,则可以使用绑定)。然后 Save 方法将创建存储库的一个实例,将类型 M 的属性添加到其中,然后保存存储库。

例子:

public class ViewModel
{
  public void Save()
  {
    // Create your repository
    // Add this.Model to the repository
    // Save the repository changes
  }
  public M Model { get; set; } // Bind your view to this.
}

这允许您在保存之前和之后执行其他操作,您可以使用其他属性来决定是否保存以及保存什么,以及您的视图模型“保存”的方式仍然是视图模型的一部分而不是存储库。

正如@devdigital 所提到的,我还建议为您的存储库考虑使用依赖注入。这意味着您不必在 Save 方法中创建存储库,而是使用传递给视图模型构造函数的存储库实例。

于 2013-05-13T05:25:32.473 回答