我的视图模型有我的模型和我的存储库实例

本文关键字:我的 模型 实例 存储 视图 | 更新日期: 2023-09-27 18:12:56

希望我说得很清楚。我有一个ViewModel叫A。我有一个叫做M的模型。我有一个存储库模型M和DB的东西,它映射到称为RM

我的ViewModel, A,有我的模型M和我的存储库RM的属性。

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

有意义吗?这是"正常"还是接近正常?

我的视图模型有我的模型和我的存储库实例

您可以描述一个典型的情况,这取决于您的偏好。如果你的视图模型希望与实体一起工作,那么它可以通过一个存储库来实现,你可以使用构造函数注入将其作为依赖注入,你的视图模型可以针对一个抽象而不是特定的存储库实现来工作。

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

就你的模型而言,你可以有一个向视图公开的属性,这样你就不需要在你的视图模型上复制模型的属性。然而,这将取决于您是否愿意视图直接访问您的模型,这可能违反了LoD(德墨忒耳定律),以避免违反DRY(不要重复自己)原则。

一种方法是在视图模型中公开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方法中创建存储库,而是使用传递给视图模型构造函数的存储库实例。

相关文章: