2010-09-12 47 views
5

我问的原因是tvanfosson的(第一)评论他的回答他在另一个question of mine,他说(关于ASP.NET MVC):“服务器端控件的缺乏是由于关注的固有分离导致MVC一个很好的发展模式..“。
我当然知道ASP.NET服务器控件,我想我知道MVC设计模式,但我不明白服务器控件如何违反MVC。服务器控件如何违反MVC设计模式?

谢谢。

回答

0

发现的“临ASP.NET MVC 2框架”由史蒂芬·桑德森答案(第5页)

” ......在现实中开发者encourged混合呈现代码(例如,操纵服务器 - 在这些相同的巨大代码隐藏类中使用它们的应用程序逻辑(例如,操作数据库数据),如果没有更好的问题分离,最终的结果往往是脆弱和难以理解的。

1

我认为它与回发+ viewstate +事件模型有很大关系。

上述情况隐含出现以模拟用户正在以多步方式与应用程序进行交互的模型,其中存在系统的各种状态。由于每个控件都持有它的视图状态,每个控件都固有地对这个整体状态做出贡献,随着页面复杂度的增加,这种状态可能变得难以遵循。我也相信便利性会促成这种复杂性。

上述可能更多的是一个宁静的论点,它促进更多地依赖于协议的做事方式。使用帖子来达到上述目的,并不是HTTP协议所期望的。只是采取原始的asp.net网格内置分页,因为它基于回发搜索引擎忽略了第1页以外的任何内容。您也不再有办法通过url访问上述信息页面。

imho asp.net MVC模式中的MVC模式更多的是关于简单的请求/响应操作。你可以让它变得像你可能需要的那样复杂,但它促进了一种更简单的操作方式。它的基础不是基于分散在页面/视图上的几个不同位的信息来处理状态,如经典;但如果这是你所需要的,你仍然可以实现它,但是当你这样做的时候你必须更加明确。

+0

恕我直言,你描述的是服务器控制缺乏无状态和简单性,我看不出这些如何与MVC相矛盾。 – 2010-09-12 16:26:49

+0

@Oren将MVP(模型视图演示者)视为混合。这和MVC之间的一个重要区别是状态的处理,因为无论你把状态放在哪里,MVP都可以根据用户的动作改变视图,所以视图不是只显示一次。在MVC中,您对每个动作都展示了不同的视图(是的,您可以显示相同的文件/视图,但在概念上),下一个动作的处理与前一个无关。使用asp.net classic + server控件,常见的东西显示相同,但​​在此控件中显示此数据/或隐藏此数据。 – eglasius 2010-09-13 15:38:28

+0

请注意,@ tvanfosson可能有关于控制者的意见和责任的责任,所以他可能会根据(不)应该在视图上做出更直接的解释。对我来说,我发现它与MVP比较更清晰,因为你可以有一个很好的结构化经典的asp.net应用程序,但仍然显示出与MVC的重要区别。我认为MVC的方式更符合HTTP的本质。 PS。请注意,asp.net MVC使用MVC的变体,还有其他变体。 – eglasius 2010-09-13 15:50:27