这是适当的MVC方式吗?

时间:2011-06-07 15:02:25

标签: model-view-controller

我仍然掌握了MVC,并且我试图尽可能地保持这种模式。我有一个具有Status属性的Model,等等。控制器调用视图并传递适当的模型。在Status =“Incomplete”的视图中,我需要它显示Incomplete <a href="blah">Complete registration</a>,如果Status =“On Waiting List”我需要它来显示On Waiting List: Position @Model.WaitListPosition等等。

决定根据状态显示什么的逻辑将在View中,因为它决定了它如何呈现给用户,对吧?或者字符串是否应该在控制器中构建并传递给视图?

4 个答案:

答案 0 :(得分:2)

第一个更好。控制器应尽可能薄。让视图决定如何呈现传递给它的数据。

答案 1 :(得分:0)

不要在控制器中构建字符串,除非您希望业务逻辑在控制器中而不是在业务组件中。如果您绝对觉得需要将其作为字符串,因为这是您解决此问题的唯一方法,请让业务组件完成实际工作。

至于如何在视图中分支,它可以像包含特定条件的数据一样简单,并且基于该数据的存在而具有视图分支。或者使用布尔值(或某种标志)来指示用户在过程中的位置。如果该值表示不完整,则显示“不完整”逻辑。这样,View只根据数据绑定做出决定,控制器只控制流程而不做出业务决策。

答案 2 :(得分:0)

此逻辑最适合您的视图 - 最终归结为代码重用,这是特定于特定视图的。如果在多个视图中需要相同的行为,那么在视图中运行此逻辑仍然会更好,无论是作为部分视图还是自定义HTML帮助程序。保持控制器中的逻辑尽可能简短。

答案 3 :(得分:0)

关注点分离表明控制器不应该知道如何显示数据,只需要获取视图所需数据所需的模型调用,其中包括Status字段。该视图涉及逻辑应指示如何转换数据以供显示的地方。

某些框架( Ruby on Rails 是我所知道的唯一框架)提供了从视图布局中提取数据转换逻辑的方法。在RoR的案例中,他们被称为帮助者。例如,您有一个名为format_status的辅助方法,它将 Status 作为参数,并返回预期的HTML呈现。请注意,这使您可以轻松地为该方法编写单元测试,而无需处理(更多)复杂的Web视图测试。