2011-04-25 34 views
6

我需要一个快速的完整性检查。我试图设计自己的观点,使得它们干净,简洁,并且尽可能没有任何条件逻辑。然而,我很难摆脱他们的全部条件陈述。我想知道在视图中是否有条件声明是不可避免的?视图中是否有条件声明坏消息?

例如:

@if (Model.UserCanEdit) 
{ 
    <button type="button" id="Edit">Edit</button> 
} 

有不如果有一个具有多个元素,可以改变或根据各种条件显示/隐藏的视图许多选项。

那么我应该遵循哪些准则,关于在哪些地方绘制视图允许条件逻辑的界限?我可能没有想到在我的观点中减少条件逻辑的一些方法是什么?

在此先感谢。

回答

10

我不会说在视图中使用条件都是不好的 - 毕竟视图的主要目的实际上是显示来自模型的数据。 (是必需的,有时条件语句中显示的数据。)

然而 - 使用 条件语句丰富可以使维护 噩梦,最终可读性。 重要的是要记住不包括 包括 范围内的条件成为业务逻辑,但允许 他们的目的为 “表示逻辑”。

可能选择:

自定义HTML助手:

如果你是不是疯了关于使用条件语句 - 你可以考虑使用助手收拾东西一点。有关更多信息,请查看Creating Custom HTML Helpers.

其他视图/局部视图:

而且,许多人会指出 - 使用条件语句使一个单一的视图功能的多个视图应该不是最好的办法解决这个问题。

+2

第二段+1。根据条件是什么,它可能只是表示逻辑。有人可能会争辩说,这个观点应该有尽可能少的逻辑,并且任何决定观点的参数都可以传递到较低的水平。毕竟,如果您可以选择显示两个数据片段(即使一个选项不显示任何内容),那么您的视图就会拥有真正不需要的数据。 – corsiKa 2011-04-25 21:39:16

1

在最好的情况下,尽量避免它们。他们开始很简单,但后来它可以变成很多意大利面代码。说这并不总是可能的,而且你不得不去做它们。

通常你分割你的视图或(有多个部分视图),然后决定在控制器的if/else位。这可以确保您的ViewModel保持不同。

-

作为一个经验法则,从我的经验,我总是试着去理解的意见,而不是技术企业的角度。有时你的两个视图可能看起来非常相似现在并且可能只需要几个if/else来区分对方但是在商业方面他们是不同的,很显然,每个视图都会有很多新的需求它与其他观点完全不同。继续关注商业视角,您应该为两者创建单独的视图和视图模型。

3

代码中的许多检查可能表明您试图使一个视图表现为两个单独的视图。

在控制器级别进行一次检查然后使用适当定制的模型呈现不同视图可能会更好。这样,每个视图仍然是“哑巴”,你不会传递更多的信息。

要直接回答您的问题 - 理论上,确保可以通过为每个此类状态分别查看来避免“全部”条件检查。但是,您可以拥有一个适合多种类似用途并具有条件的视图,同时保持可读代码并非不合理。

+0

如果是两个视图中的一个,我会(并且确实)考虑这一点。但是,可能条件的组合数量往往超过两个。例如,想象一个包含多个不同链接操作的视图,并且每个操作都是基于权限的渐进级别显示的,其中您拥有的权限越多,您可以在视图上执行的操作越多。所以我再也看不到有什么方法可以避免在整个视图中散布几个条件。 – 2011-04-25 21:55:10

+0

Jerad Rose - 您可以将项目分为诸如管理员,所有者,成员等区域,否则使用助手的解决方案如上所述。 – Alex 2011-04-25 21:58:04