视图中可以采用什么逻辑? (MVC)

时间:2018-12-17 13:22:13

标签: asp.net-mvc model-view-controller

我有一个场景,根据用户的特性,可以在模式A或模式B中显示视图,可以说用户A可以看到视图模式A,用户B可以看到视图模式B。对于这种逻辑被保存在控制器中的场景,有两个单独的视图(即使视图大部分相似,但是只有视图模式B隐藏了某些字段),或者可以使用

这样的视图逻辑吗?

@if (Usertype == "A"){ then display XYZ } else { display ABC }

3 个答案:

答案 0 :(得分:2)

如果逻辑仅与隐藏/显示某些字段有关,则保持单一视图并应用条件以呈现页面上的特定内容。 如果在系统中可以添加任何新的UserType(User),则从长远来看,在这种情况下保持单一视图很容易。

答案 1 :(得分:2)

我还将看一下这些在视觉上发散的可能性。如果B极有可能需要向B添加一些不同的东西而最终改变布局,那么请使用单独的视图并让控制器包含逻辑。

此外,这使您可以在某个时候将逻辑测试放入单元测试中。将逻辑放在控制器中还有助于确保是否对数据层进行了更改,从而可能因构建失败而破坏此条件检查。如果将这种逻辑放到视图中,就不会获得安全网,并且在发布运行时错误后最终会遇到运行时错误,而不是容易解决的良好开发错误。

答案 2 :(得分:0)

我的首选是在View中尽可能少地编写代码。我尝试将代码保留在视图中,以循环访问模型中的集合并从模型中选择属性。为什么?尽管并非不可能,但测试视图中的所有逻辑是困难的,并且很少保持最新。每个语句在视图中都是潜在的YSOD。

如果可能,请在您的控制器中做出决定,然后返回一个命名视图。您可以在控制器上编写单元测试,以验证预期的实际情况。