【问题标题】:ASP.NET MVC controllers static methodsASP.NET MVC 控制器静态方法
【发布时间】:2011-05-25 15:27:00
【问题描述】:

最近出现了一个关于为什么 ASP.NET MVC 不将静态方法用于其控制器方法的讨论。虽然我对使用静态方法反对持反对态度,但我认为非静态操作方法的唯一两个论点是继承和模拟能力(继承给了你)。 p>

Microsoft 对非静态动作/方法的设计选择是什么?

【问题讨论】:

    标签: asp.net-mvc controller static


    【解决方案1】:

    虽然我不知道那些设计 ASP.NET MVC 框架的人的想法,但这对我来说是最重要的:

    每个请求实例化一次实例控制器,多个请求可以同时发生。如果控制器是静态的,那么控制器上的任何状态都会同时在所有请求之间共享。你可能不想要那个。更新共享状态会成为锁定争用的雷区,如果锁定没有正确实施,可能会出现死锁,并且很难跟踪错误。

    简而言之,使用静态控制器将是一场噩梦。

    【讨论】:

    • 我不确定你是否真的定义了任何理由。您只是解释了为什么 Web 环境中的静态会导致意外行为。
    • 当然,它可以“导致意外行为”这一事实是不将它们用作 ASP.NET MVC 框架的一部分的正当理由。当然,正如我所指出的,我的回答是推测性的,因为我不知道创建该框架的人的想法。但是,这仍然是一个潜在的原因。
    • 您还可以将 DI 和可测试性添加到它们不是静态的原因
    • 问题是询问静态方法,而不是静态控制器
    【解决方案2】:

    例如,您有控制器“Home”和操作“FillData”, 和另一个控制器“学生”和动作“FillData”。 想象一下,如果您将动作“FillData”设置为静态方法,并且可以在任何其他控制器中轻松调用,将会发生什么。 这将是一个大问题。

    【讨论】:

    • 它们将在不同的类中,并且您可以拥有私有静态方法。静态的好处是它会阻止对实例字段的访问。对成员的不必要访问是 OOP 程序开发错误的一种常见方式……尤其是当有人想在星期五强行更改时……“我可以在这里添加一个布尔值,有什么害处?” (请注意,此语句实际上并不适用于 Web API 控制器。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    相关资源
    最近更新 更多