我的视图模型有我的模型和我的存储库实例
本文关键字:我的 模型 实例 存储 视图 | 更新日期: 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方法中创建存储库,而是使用传递给视图模型构造函数的存储库实例。