【问题标题】:Is it bad practice to have a ViewModel with a property typed as another ViewModel in ASP.NET MVC在 ASP.NET MVC 中拥有一个属性类型为另一个 ViewModel 的 ViewModel 是不好的做法吗
【发布时间】:2011-04-15 13:36:39
【问题描述】:

拥有一个具有另一个视图模型属性的视图模型会被认为是不好的做法吗?...如:

public class PersonViewModel
{
     public PersonJobViewModel Peron { get; set;}
     //other properties here...
}

编辑

关于我的特殊情况的更多信息:

我有一个当前包含 2 个域类的视图模型。我将此视图模型传递给加载 2 个局部视图的视图(视图模型中的每个域类一个)

因此,我最终将纯领域模型直接传递到部分视图中。

我的想法是,我可以为每个域模型创建一个视图模型,然后将它们包装到另一个视图模型中,然后传递给我的父级...

或者有没有更好的方法来实现这一点?

【问题讨论】:

  • 我不会这么认为。你在想什么缺点?
  • 没什么特别的……只是感觉“有点乱
  • 我和斯蒂芬有同样的感觉。我经常这样做,但总是觉得这有点像黑客......只是无法说明为什么......
  • 是的,它确实感觉有点“hackish”,但普遍的共识似乎是这样做很好......这是一件好事。只是需要确保我走在正确的轨道上

标签: c# asp.net asp.net-mvc asp.net-mvc-3


【解决方案1】:

不,一点也不差。这是非常好的代码。它允许您在不同视图之间重用部分视图模型。

【讨论】:

    【解决方案2】:

    我不认为将一个 ViewModel 聚合到另一个 ViewModel 中是不好的做法。我可以看到一个优势,比如能够渲染部分视图或使用聚合视图模型的EditorFor

    【讨论】:

    • 哦,好吧,这几乎是我的确切场景
    • 能够使用EditorFor 很好,这是重复使用它们的绝佳理由。
    【解决方案3】:

    绝对没问题。从概念上讲,视图模型应该使用给定视图的相关信息来模拟您的域模型。

    请记住,一旦“最佳做法”变得违反直觉和适得其反,在特定情况下,它们可能不再是您的最佳做法。最佳做法是指导方针,并非严格遵守要求。

    编辑:更改了我最初的评论,因为我不确定我之前是否足够清楚地说可以这样做。

    Edit2:还要问问自己是否需要视图模型。如果他们从字面上模仿你的领域模型,那有什么意义呢?只需使用您的领域模型(除非您有其他使这种情况变得丑陋的依赖项)。

    【讨论】:

    • 如果你要投反对票,你至少可以花时间写下原因。
    • +1 表示“请记住,一旦“最佳实践”变得违反直觉和适得其反,在特定情况下,它们可能不再是您的最佳实践”!
    【解决方案4】:

    不,您可能有合作伙伴模型与某些字段,例如:

    public class Parner
    {
      int age {get; set;}
      //etc
    } 
    
    public class ParnerList
    {
      public List<Partner> ListOfPartner {get; set;}
      public int PageNumber {get; set;}
      public int PageCount {get; set;}
      //etc
    }
    

    在 View 中用于显示列表与分页很容易

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-27
      • 2015-12-02
      • 1970-01-01
      • 2020-02-24
      • 1970-01-01
      相关资源
      最近更新 更多