35

在查看 ASP.NET MVC 站点的示例时,我看到了很多在视图中嵌入逻辑的示例,例如:

<% if (customerIsAllowed)
   { %>

   <p>nnn</p>
   <p>nnn</p>
   <p>nnn</p>
   <p>nnn</p>
   <p>nnn</p>

<% }  else {%>

   <p>nnn</p>
   <p>nnn</p>
   <p>nnn</p>
   <p>nnn</p>
   <p>nnn</p>

<% } %>

尽管这对我来说似乎是错误的,因为这是我们在 ASP 3.0 中试图摆脱的那种事情,但我什至在一些播客中听说,自从 MVC 框架的其余部分以来,“一点点逻辑就可以了”正在处理我们在 ASP 3.0 中没有的结构。

是否有任何 MVC 约定指定视图中允许的逻辑类型和数量?

4

5 回答 5

41

这取决于逻辑的原因。如果逻辑基于控制器传递给它的某些属性选择替代表示,则可能没问题。这允许您重用一些视图。不必为每个自定义权限重新创建(和重复)整个视图,您可以传入一些数据,允许基于此权限自定义视图。

我认为这是理想化的 MVC 和严格执行 DRY 之间的务实平衡(不要重复自己)。在某些情况下,如果您不能轻松实现两者,那么违反其中一个或另一个是更明智的做法。在明确模型和基本视图相同的情况下,在视图中添加一点逻辑以保持视图 DRY 是合理的。

于 2009-01-14T14:46:32.683 回答
3

如果逻辑与视图的格式有关,并且不会导致实体或数据的更改,那么我认为在视图中是可以的。

于 2009-01-15T03:00:11.250 回答
2

42.

只是在开玩笑 :-)

对此没有固定的答案,尽管良好的关注点分离是一种普遍接受的最佳实践。围绕这个问题的争论可能是无止境的,知道为你的特定项目做正确的方法会带来我认为的经验,并且能够注意到“代码异味”或感觉不正确的事情。

于 2009-01-15T03:04:00.040 回答
1

这是另一种思考方式。表示逻辑进入视图。业务处理逻辑进入控制器,数据验证进入模型。但是最终应该是指导而不是宗教:)

于 2009-01-14T15:17:49.653 回答
1

只要视图中的逻辑用于演示(如果您不喜欢标记文件中的代码,可以将其放入代码隐藏文件中),就可以了。在您的示例中,代码/逻辑用于选择一个可以的视图部分。演示文稿可以有逻辑,它不需要是简单的 HTML。

于 2009-01-15T09:22:37.267 回答