【问题标题】:ASP.NET MVC, Model and ViewModel separation of concerns?ASP.NET MVC,模型和视图模型的关注点分离?
【发布时间】:2010-12-09 00:14:16
【问题描述】:

最近,我一直在探索当底层模型很复杂时,组织 ASP.NET MVC 应用程序的表示层的最佳方式是什么。到目前为止出现的是带有 ViewModel 对象的 MVVM 架构。但是,我不确定在这种架构的情况下最好的做法是什么。

  • ViewModel 对象可以包含 Model 对象吗?
  • 如果使用 MVVM,是否建议在视图上使用模型对象?
  • 应该在哪里实现验证,在 ViewModel 或 Model 类上?
  • 业务层(服务层)应该知道 ViewModel ,谁负责 ViewModel 和 Model 之间的映射?

【问题讨论】:

  • 你可能是指 ViewModel 而不是 ModelView...
  • 确实是罗伯特,感谢您的指正。

标签: asp.net-mvc architecture viewmodel mvvm


【解决方案1】:
  • 大多数时候,当我们需要发送多种类型的模型对象或需要传递仅在视图中需要的几个属性时,ModelView 对象只是包含模型对象的容器。
  • 如果 View 的工作是显示模型的详细信息,而没有其他东西可以传递给 View,为什么不呢?
  • 视情况而定。您可以使用 ModelView 和 Model 类在层之间传输数据。并通过自定义模型绑定器或服务层进行验证。
  • 他们没有理由不了解 ModelView。但通常你只是从控制器的服务层获取请求的模型,然后将它/它们直接或在模型视图中传递给视图。

顺便说一句,我不会将 ModelViews 视为一种架构。这更像是“在需要时使用一个”。毕竟,这样做将数据传递给视图是没有意义的:

class SomeModelView {
    public MyModel model { get; set; }
}

只要传递MyModel 就足以让视图完成其工作。

【讨论】:

  • 感谢您的回复。你的回答很有帮助。 4. 问题的出现是因为业务逻辑将从不同的角度使用:UI、API 以及可能具有完全不同 UI 技术的其他应用程序。这就是为什么我问自己,业务逻辑返回适合第一个 UI、ASP.NET MVC 应用程序的 ViewModel 是否很好。同样在 WPF 中,ViewModel 显然是表示层的一部分。
  • @çağdaş:那么您是否同意,如果您的模型类足以在您的视图中使用,那么您不应该需要 ViewModel 对象? IE。这是不必要的并发症吗?
  • @cottsak。对,就是这样。毕竟,视图负责显示模型。它是视图模型还是模型并不重要。只要模型足够展示,就不需要其他对象了。
猜你喜欢
  • 2016-12-18
  • 2011-10-24
  • 2019-09-06
  • 1970-01-01
  • 2012-01-13
  • 1970-01-01
  • 2021-11-14
  • 2010-11-18
  • 2012-07-11
相关资源
最近更新 更多