在 asp.net 的视图模型中添加业务逻辑是不是会增加传递给视图的对象的大小?

Posted

技术标签:

【中文标题】在 asp.net 的视图模型中添加业务逻辑是不是会增加传递给视图的对象的大小?【英文标题】:Does adding business logic in a view model in asp.net increase the size of the object being passed to the view?在 asp.net 的视图模型中添加业务逻辑是否会增加传递给视图的对象的大小? 【发布时间】:2017-05-25 17:03:16 【问题描述】:

这是我一直试图找到明确答案的东西,到目前为止还没有在网上找到运气。如果在 ASP.NET 项目中,我有一个视图模型,用于将数据传递给浏览器中的视图,是否包括用于访问模型层以获取数据的方法会增加传递的结果对象的实际大小?我的直觉是肯定的,我一直在尝试阅读有关堆栈溢出的其他答案,以找到一个可靠的答案来支持它,但没有运气。

视图模型中有一些真正单一的方法,其中一些跨越 100 多行或更多行,通过 LINQ 操作过滤可枚举的数据列表。

【问题讨论】:

您正在以生成的 html 的形式将视图传递给浏览器。向视图模型添加业务逻辑不会影响 html 的大小。您的视图(这是一个动态生成的类)仅存在于服务器上。 谢谢伊瓦洛! JosephRT 进一步解释了这一点,因此在这种情况下,问题似乎主要是耦合。 【参考方案1】:

不,不应该。视图(通常)从 Razor .cshtml 构建并发送给用户。只有视图的内容(布局、捆绑的 JS、样式表、页面本身等)会发送给用户。 ViewModel 仅用于构建视图。

MVC 有一个名为model binding 的概念,在该概念中,传入的 HTTP 请求的数据被映射到一组适当的参数。在请求中,将创建一个新的 ViewModel 并将其传递给适当的 Action 方法(或者如果请求可以映射到一组参数,也会发生这种情况;不必是单个参数)。

附带说明,拥有复杂的 ViewModel 会使模型绑定变得困难。在 ViewModel 中包含业务逻辑也是不受欢迎的;这使得重用和遵循变得更加困难。将它移到您的业务层或将其禁止到您的控制器中是理想的。

【讨论】:

感谢您的帮助。我正在四处寻找这些信息,并对我没有遇到什么感到惊讶。在这种情况下,它更像是一个以 MVC 方式完成的 Web 表单,而不是 razor。我希望它是用剃刀完成的,但那是另一回事。

以上是关于在 asp.net 的视图模型中添加业务逻辑是不是会增加传递给视图的对象的大小?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC

翻译转载官方教程Asp.Net MVC4入门指南:添加一个控制器

ASP.NET MVC:动态添加部分视图并将它们反映在视图模型中

ASP.net MVC - 如何在各种视图中保留模型

ASP.NET MVC - 使用 C# 将引用不同程序集的模型从控制器传递到视图

asp.net mvc c# - 是不是可以从 CodeBehind 中的模型访问视图中文本框的值?