C# 本规范违反了哪些符合标准?

C# 本规范违反了哪些符合标准?,c#,asp.net-mvc-3,design-patterns,C#,Asp.net Mvc 3,Design Patterns,使用私有ViewModel对象,使我的所有控制器操作都可以访问它,这有什么错 我使用的是EF4、MVC3、DBContext和DBsets public class MyController { private MyViewModel _myViewModel; public ActionResult Index(MyViewModel myViewModel){ <-- There is a model Binder making this work _myViewModel =

使用私有ViewModel对象,使我的所有控制器操作都可以访问它,这有什么错

  • 我使用的是EF4、MVC3、DBContext和DBsets

    public class MyController {
    
    private MyViewModel _myViewModel;
    
    public ActionResult Index(MyViewModel myViewModel){ <-- There is a model Binder making this work
    
    _myViewModel = myViewModel;
    
    return _myViewModel;
    }
    
    }
    
    公共类MyController{
    私有MyViewModel\u MyViewModel;
    
    公共行动结果索引(MyViewModel MyViewModel){因为每次调用控制器操作时,都会得到不同的控制器实例。因此,在后续操作中,可能存储在此控制器实例字段中的前一个操作中的任何内容都将丢失。这就是为什么在ASP.NET MVC中,会有诸如会话、应用程序状态、临时数据、cookie、Cac等概念的原因他,…你说得对。

    因为每次调用控制器操作时,都会得到不同的控制器实例。因此,从上一个操作存储在该控制器实例字段中的任何内容都会在后续操作中丢失。这就是为什么在ASP.NET MVC中会有诸如会话、应用程序状态、,TempData、Cookies、Cache等等,你可以随便说。

    首先,通过使ViewModel成为控制器的一个成员,你实际上限制了你在多线程环境中可以做的事情。如果在同一个控制器上调用了多个动作,你可能会得到一个竞态条件,以确定哪些传入的视图模型用于ea奇景


    编辑:您每次都会得到一个不同的控制器实例,因此不会发生这种情况。但是,对于使用私有成员的其他类来说,这仍然是一件需要记住的事情。首先,通过使ViewModel成为您控制器的成员,您确实限制了您在多线程环境中可以执行的操作。如果如果在同一控制器上调用tions,您可能会得到一个竞争条件,以确定每个视图使用哪个传入的视图模型


    编辑:您每次都会得到一个不同的控制器实例,因此不会发生这种情况。但是,对于使用私有成员的其他类来说,这仍然是一件需要记住的事情

    我认为您的WizardViewModel绑定器会随着每个附加的
    MyController
    操作而成倍地复杂化。我认为您的WizardView模型绑定器会随着每个附加的
    MyController
    操作而使自身呈指数级复杂化。因此,视图模型必须始终传递给或在处理该视图模型的每个操作中创建?@Doug Chamberlain,是的,控制器操作将视图模型作为参数,并将视图模型传递给视图。可能是同一个视图模型,might可能不同。这取决于。因此,视图模型必须始终传递给或在处理该视图模型的每个操作中创建?@Doug Chamberlain,是的,控制器操作将视图模型作为参数并将视图模型传递给视图。可能是相同的视图模型,也可能不同。这取决于。