0

如果我使用通过请求传递给控制器​​中的动作的变量id或使用模型的 IdFoo 我使用相同的 id 检索到,我需要知道它是更重还是不好的做法,我曾经通过相同的请求传递。

假设我正在使用带有 C# 和实体框架的 ASP.NET MVC4,并且我有这个带有数据注释的模型,将IdFoo声明为模型的主键:

public class Foo
{
    [Key]
    public int IdFoo { get; set; }
}

在我的FooController中,在Edit操作中,我需要检索 IdFoo,但它与我通过路由传递的id变量相同。

public class Foo
{
    [HttpGet]
    public ActionResult Create(int id = 0)
    {
        var Foo = db.Foo.Find(id);

        // Other operations.

        var Bar = Foo.IdFoo;

        var Qux = id;

        // Bar = Qux

        ...

        return View(Foo);
    }
}

仍然继续使用我通过请求传递的其余控制器代码的id变量是一种好的做法/性能强度较低,还是应该使用Foo.IdFoo呢?请注意, Foo.IdFoo 和 id 将始终具有相同的值,因此我知道我可以同时使用这两种方法,我只是在寻找良好做法或性能原因来证明使用一种或另一种的合理性。

4

2 回答 2

0

我认为性能上没有任何区别。但是,还有另外两个考虑因素:

  • 如果变量或属性被修改了怎么办?一千次提交之后,其中一个操作可能最终会更改该对象的 Id。或者可能不是这些操作中的任何一个,而是另一个线程中的某些操作。因此,如果出现这种(现在不太可能)行为,使用该属性可能会更好。顺便说一句,我不知道 ASP.NET 的细节,但是您的 ID 属性看起来不应该在项目的生命周期内更改,因此将这个属性设置为只读可能是明智的(没有访问器),所以它只会在构造函数中设置。

  • 什么更具可读性?现在这两个选项看起来一样,但在现实世界中,这些类名通常会很长,所以简单的 id 可能会更好。

于 2013-10-30T13:46:46.600 回答
0

除非IdFoo正在做不应该做的事情,否则从性能的角度来看,它应该没有任何区别。

从微优化的角度来看,我想从技术上讲,使用已经在上下文中的变量而不是从Foo对象中提取它会更快;但这确实令人毛骨悚然,我没有基准统计数据来证明这一理论。

于 2013-10-30T13:17:51.363 回答