我正在创建的viewmodel存在一个必需的类,并且根据要加载的页面,另一个类被实例化,或者可能是另一个viewmodel。这个viewmodel的实现方式如何?
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; }
}
基于上面的示例:剃刀引擎呈现的每个视图都需要实现类'Foo'。
第一页需要“Bar1”类。控制器中的代码如下所示:ViewModel.Bar1 = new Bar1();
第二页需要'OtherViewmodel'类,并将在OtherViewmodel的控制器中创建一个实例。
我不知道这是否是面向对象编程的正确方法。当一个viewmodel不需要某个对象并且它是该类的属性(但没有实例化)时,该对象的大小又如何呢?
例如,类'ViewModel'将用于我的所有页面,因此我的所有类都将成为此类中的属性。我认为有一种更清晰的编程方式,但我还没有找到它。
任何帮助将不胜感激。提前谢谢。
答案 0 :(得分:3)
如何使用基类?
public abstract class BaseViewModel
{
protected BaseViewModel()
{
foo = new Foo();
}
public Foo foo { get; set; }
}
您可以从仅包含一个条形的类派生类:
public class Bar1ViewModel: BaseViewModel
{
public Bar1 bar1 { get; set; }
}
这对我来说似乎更清洁。您还可以在派生类的构造函数中实例化Bar1
类,这样您就不必在控制器中执行此操作:
public Bar1ViewModel()
{
bar1 = new Bar1();
}