c# - 具有必需类和多个可选类的 View 模型

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

我正在创建的 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/

相关文章:

c# - 可以在 Unity3D 中创建更高效​​的寻的导弹系统吗?

c# - 检查两个值之一是否为空而另一个不为空的简洁方法

javascript - CollapsiblePanelExtender 点击事件

c# - 如何使用 jquery 在 MVC 中发布 View 模型

swift - Swift 中的继承和多态

c# - 为什么要避免类型转换?

asp.net-mvc - 将 MVC 5 应用程序部署到 Azure 站点 : UseMicrosoftAccountAuthentication

c# - 是否可能有 2 个 View 与一个操作相关联?

java - Java中序列化和反序列化后如何保留引用?

python - 如何通过子类化拦截操作?