【问题标题】:Multiple granular view-models or a single model - Asp.NET MVC3多个粒度视图模型或单个模型 - Asp.NET MVC3
【发布时间】:2011-08-09 20:48:14
【问题描述】:

我正在考虑使用 MVC3 创建我的第一个 ASP.NET MVC 应用程序。

我使用的项目模板包括一些用于注册用户、登录和更新忘记密码的模型。

我希望根据我自己的数据存储(可能使用实体框架)和使用 google OAuth 对用户进行身份验证。

我假设我想要一个包含一些标准属性和一些处理“本地”身份验证和 OAuth 调用的业务逻辑的用户模型类,但项目模板让我感到困惑。

我应该为不同的操作(如登录、注册等)创建多个视图模型,然后使用控制器实例化并调用我的模型以执行业务逻辑,还是应该为所有不同的操作使用我的用户模型?

谢谢 本

【问题讨论】:

    标签: asp.net-mvc-3 model viewmodel modeling


    【解决方案1】:

    我应该创建多个 不同动作的视图模型,例如 登录,注册等,然后使用 控制器实例化和 调用我的模型来执行 业务逻辑还是我应该使用我的用户 所有不同动作的模型?

    按视图查看模型。这就是规则。每个视图甚至可能有 2 个视图模型(一个用于在 GET 中呈现数据,一个用于在 POST 操作中从视图接收数据)。在创建视图模型时不要害羞。您绝对不应该将用户模型用于所有不同的操作,那将是灾难性的。该模型应该由您的服务层使用。用户模型将由该层操作,并且永远不会传递给视图。

    您还可以查看AutoMapper 以了解您的模型类和视图模型之间的映射。这是一个很棒的工具,特别是当视图模型的数量开始增加时会派上用场。

    【讨论】:

    • @BenCr,因为每个视图在格式化和验证方面都有不同的要求。插入视图与更新视图不​​同,更新视图与列表视图不同。如果您在所有这些视图中使用相同的模型,那么您在 StackOverflow 上的下一个问题将是 我如何根据控制器操作编写条件数据注释验证属性,一旦您发现自己面临某种情况,例如某些属性在更新视图中是必需的(例如 Id),并且在插入视图中不需要/不存在。因此,请始终创建和使用特定的视图模型。
    • 那么视图模型是否应该知道它用于执行实际应用程序逻辑的其他一些“BE”类型层?看起来MVC实际上更像MVVMC
    • @BenCr,控制器操作查询服务层并获取模型。然后它使用映射层将此模型转换为视图模型。最后它将视图模型传递给视图。这也适用于相反的方式:控制器操作从视图接收视图模型(例如在 POST 操作中)。它将这个视图模型映射回模型并将模型传递给服务层进行处理。所有的格式化和表面验证都应该在视图模型中完成。
    • 因此控制器基本上将 VM 编组为 M 并返回。好的。 “映射层”是指AutoMap 之类的东西吗?
    • @BenCr,没错。而且,是的,通过映射层,我绝对是指 AutoMapper。完美的例子,Jimmy Bogard 实际上是这个框架的创造者。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-19
    • 2012-03-13
    相关资源
    最近更新 更多