Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Model view controller 这是MVC的正确做法吗?_Model View Controller - Fatal编程技术网

Model view controller 这是MVC的正确做法吗?

Model view controller 这是MVC的正确做法吗?,model-view-controller,Model View Controller,我仍然在掌握MVC,并且我正在尽可能地保持这种模式。我有一个具有身份属性的模型。控制器调用视图并传递适当的模型。在视图if Status=“complete”中,我需要它显示未完成,如果Status=“On Waiting List”中,我需要它显示等待列表中的:Position@Model.WaitListPosition,等等 基于状态决定显示什么的逻辑将在视图中,因为它决定如何向用户显示,对吗?还是应该在控制器中构建字符串并将其传递给视图?第一个更好。控制器应尽可能薄。让视图决定如何呈现传

我仍然在掌握MVC,并且我正在尽可能地保持这种模式。我有一个具有身份属性的模型。控制器调用视图并传递适当的模型。在视图if Status=“complete”中,我需要它显示
未完成
,如果Status=“On Waiting List”中,我需要它显示等待列表中的
:Position@Model.WaitListPosition
,等等


基于状态决定显示什么的逻辑将在视图中,因为它决定如何向用户显示,对吗?还是应该在控制器中构建字符串并将其传递给视图?

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

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


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

此逻辑最适合您的视图-最终归结为代码重用,这是特定于特定视图的。如果在多个视图中需要相同的行为,最好在视图中运行此逻辑,或者作为局部视图,或者作为自定义HTML帮助程序。使控制器中的逻辑尽可能简短。

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


某些框架(我只知道RubyonRails)提供了从视图布局中提取数据转换逻辑的方法。在罗的例子中,他们被称为助手。例如,您有一个名为
format\u status
的助手方法,它将状态作为参数,并返回预期的HTML呈现。请注意,这使您可以轻松地为该方法编写单元测试,而无需处理(更)复杂的web视图测试。

是的,控制器不应设置显示字符串ASP.Net MVC也支持帮助程序,如果我希望在多个视图中重用代码,我肯定会使用一个。@MHollis,我会使用帮助程序,重用与否,仅仅是因为我可以轻松地为它编写单元测试。很高兴知道.Net也有一个助手功能,谢谢你提供的信息。