我正在创建的 View 模型存在一个必需的类,并且根据将加载的页面,实例化另一个类或者可能是另一个 View 模型。这个 View 模型的实现会是什么样子?
示例
public class ViewModel
{
public ViewModel()
{
foo = new Foo();
}
public Foo foo { get; set; }
public Bar1 bar1 { get; set; }
public Bar2 bar2 { get; set; }
public Bar3 bar3 { get; set; }
public OtherViewmodel otherVM { get; set; }
}
基于上面的示例:razor 引擎渲染的每个 View 都需要类“Foo”的实现。
第一页需要类“Bar1”。 Controller 中的代码如下所示: ViewModel.Bar1 = new Bar1();
第二个页面将需要“OtherViewmodel”类,并将在OtherViewmodel的 Controller 中创建一个实例。
我不知道这是否是面向对象编程的正确方法。当 View 模型不需要某个对象并且它是类的属性(但未实例化)时,该对象的大小怎么办?
例如,“ViewModel”类将用于我的所有页面,因此我的所有类都将是此类中的属性。我认为有一种更简洁的编程方法,但我还没有找到。
如有任何帮助,我们将不胜感激。提前致谢。
最佳答案
使用基类怎么样?
public abstract class BaseViewModel
{
protected BaseViewModel()
{
foo = new Foo();
}
public Foo foo { get; set; }
}
您可以从仅包含一个栏的类派生类:
public class Bar1ViewModel: BaseViewModel
{
public Bar1 bar1 { get; set; }
}
这对我来说似乎是一种更干净的方法。您还可以在派生类的构造函数中实例化 Bar1
类,这样您就不必在 Controller 中执行此操作:
public Bar1ViewModel()
{
bar1 = new Bar1();
}
关于c# - 具有必需类和多个可选类的 View 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19635439/