具有必需类和多个可选类的Viewmodel

时间:2013-10-28 12:57:32

标签: c# asp.net-mvc oop model-view-controller viewmodel

我正在创建的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'将用于我的所有页面,因此我的所有类都将成为此类中的属性。我认为有一种更清晰的编程方式,但我还没有找到它。

任何帮助将不胜感激。提前谢谢。

1 个答案:

答案 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();
}
相关问题