代码之家  ›  专栏  ›  技术社区  ›  Charles Boyung

在MVC(特别是Asp.NETMVC)中,模型应该由单个视图表示吗?

  •  3
  • Charles Boyung  · 技术社区  · 14 年前

    对我来说,这似乎没有什么意义,但在阅读了以下信息之后:

    http://weblogs.asp.net/scottgu/archive/2010/02/05/asp-net-mvc-2-release-candidate-2-now-available.aspx

    http://bradwilson.typepad.com/blog/2010/01/input-validation-vs-model-validation-in-aspnet-mvc.html

    http://blog.stevensanderson.com/2010/02/19/partial-validation-in-aspnet-mvc-2/#comment-35397

    似乎Asp.NETMVC背后的思想是模型和视图之间有一对一的关系。这似乎违背了DRY原则和其他一些标准编程实践。

    例如,假设您有一个用户帐户模型,并且有两个视图可以编辑它—一个供用户自己编辑,另一个供站点管理员编辑。管理员可以访问一个额外的内部字段,这是必需的,但用户不能查看/编辑它。根据上面提到的模型绑定功能和文章中描述的信念,我需要创建两个单独的用户模型,每个页面一个,唯一的区别是额外的字段。这只是一个简单的例子,我有一些我见过的可能意味着5或6个完全相同的物体的不同模型,只是每个视图之间有几个不同的区域。那对我来说真的没有任何意义。

    4 回复  |  直到 14 年前
        1
  •  2
  •   Mathias F    14 年前

    我没有读过你提到的帖子,但是有一个模型来表达几个观点并没有错。

    我只需要一个UserModel并在所有视图中使用它,即使有一些字段没有使用。

    如果事情变得有点复杂,但是用户仍然有很多共同点,那么您可以对usermodel(User.Address)使用聚合,也可以使用接口(User有street、city和Address字段)。

    看完这些帖子后,我发现它们处理的是验证。这是另一个故事。 如果您想使用DataAnotations,那么如果验证不同,就必须有不同的类。我不使用数据注释-所以我猜你的类设计可能不同。

        2
  •  1
  •   Robaticus    14 年前

        3
  •  0
  •   user151323 user151323    14 年前

    在ASP.NETMVC中,没有官方要求每个模型只有一个视图。在许多情况下,这会导致代码重复。

        4
  •  -1
  •   John Farrell    14 年前

    热释光;DR:制作许多视图模型。它们既便宜又灵活。

    “这似乎违背了DRY原则和其他一些标准编程实践。”

    MVC并没有改变这样一个事实:在任何语言或模式中,您都需要为每个单独的屏幕创建视图模型定义。无论是通过属性,通过XML,通过切换web表单控件,等等。

    如果将视图模型误认为是面向对象类而不是 homoiconisticish screen 您冒着填充它们的风险的表示将包含各种继承和/或业务逻辑。