2

我正在创建的视图模型存在一个必需的类,并且取决于将加载的页面,另一个类被实例化,或者可能是另一个视图模型。这个视图模型的实现会是什么样子?

例子

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”类将用于我的所有页面,因此我所有的类都将是此类中的一个属性。我认为有一种更简洁的编程方式,但我还没有找到。

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

4

1 回答 1

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();
}
于 2013-10-28T13:10:18.470 回答