【发布时间】:2016-05-15 04:44:34
【问题描述】:
Web 上大多数关于 MVC 的优秀参考都强烈建议“视图必须是愚蠢的”。它不应该包含任何逻辑。当我尝试实现它时,这似乎无效。
- 我的一些视图只显示学生的名字,一些只显示姓氏,一些显示全名。我的数据库(以及 POCO 和 DTO)将名称存储在单独的组件中。我认为格式化名称的最佳位置是视图。
- 我的视图在客户端的某些操作上发生了变化,而没有访问服务器。例如,单击某个按钮时,它会隐藏视图的某些部分并显示其他部分并禁用某些控件。或者另一个按钮打开新窗口并接受一些输入并验证它。此输入永远不会发送到服务器;它仅对某些客户端活动有用。
- 我在服务器端进行了验证。但为了将命中保存到服务器,我也在客户端进行了验证。
- 使用 KnockoutJS 进行数据绑定。
- 根据从服务器接收到的数据(开始日期和结束日期),我在客户端生成表格以显示该时段的各个部分,每个部分切片 1 小时。这是类似于 GUI 的调度。为了实现这一点,我需要进行日期和时间计算。当我在石器时代(ASP.NET WebForms)时,我在服务器端生成这个表;我知道你很震惊。我将其转移到 JS 以提高性能。
- 在 SPA 中,视图通过 AJAX 仅从服务器获取必要的数据来保存大部分逻辑。
我可以在这里放许多其他类似的例子,这些例子迫使我把一些逻辑放在眼里。考虑到视图仍然具有逻辑性,并且使用 JS 的人数日益增加,我们还能说“视图必须愚蠢”是正确的说法吗?
对以上几点进行解释的一些细节会有所帮助。
注意事项:
- 虽然我的问题是基于 ASP.NET,但我希望得到的答案仅引用 MVC 作为设计模式;无论我使用什么技术。因此,请不要建议进行验证的另一种方法。以上几点只是为了说明一些需要考虑逻辑的情况。
- 我执行上述几点的方式可能有问题。但我唯一的观点是,JS 的使用(并因此将逻辑放入视图)正在增加。
- 欢迎大家反驳以上几点,以防我执行错误;只是不要以这种方式重定向整个讨论。
编辑 1: @kayess:是的,我有模型和视图模型,这在 MVC 中很明显。与特定视图密切相关且无法重用的服务器逻辑放在 ViewModels 中。可重用的领域逻辑的主要部分放在模型中。即使在拥有 ViewModel 之后,我还是更愿意在客户端做很多事情。关于缩小问题,这个问题的基本答案将是“是”或“否”。其他细节将只是为了支持答案。 我认为这不会引起意见,因为一定有一些关于 MVC 观点的东西我没有完全理解。回答问题的人只需向我指出。
【问题讨论】:
标签: asp.net-mvc design-patterns model-view-controller view