希望我在这里清楚。我有一个名为A
的ViewModel。我有一个名为M
的模型。我有一个模型M
的存储库以及它映射到名为RM
的数据库内容。
我的ViewModel A
是否具有我的模型M
的属性和我的存储库RM
的属性。
然后我会通过调用RM
上的各种方法并绑定到M
来使用它,我将传递给RM
中的某些方法,例如Save()
。
有意义吗?那是“正常”还是甚至接近?
答案 0 :(得分:1)
您可能会根据自己的偏好描述典型情况。如果您的视图模型希望与实体一起工作,那么它可以通过存储库执行此操作,您可以使用构造函数注入将其作为依赖项注入,并且您的视图模型可以针对抽象而不是存储库的特定实现。
如果您希望在构建后稍后访问存储库,则可以将存储库分配给私有字段或属性。
就模型而言,您可以拥有一个属性,将其公开给视图,这样您就不需要在视图模型上复制模型的属性。但是,这取决于您是否对直接访问模型的视图感到满意,这可能违反了LoD(Demeter法则),以免违反DRY(不要重复自己)原则。
答案 1 :(得分: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.
}
这允许您在保存之前和之后执行其他操作,您可以使用其他属性来决定是否以及保存的内容,以及视图模型“保存”如何仍然是视图模型的一部分而不是存储库。< / p>
我还建议使用@devdigital提到的依赖注入为您的存储库。这意味着您不必在Save方法中创建存储库,而是使用传递给视图模型构造函数的存储库实例。