Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.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
C#ASP.NET、WebForms到MVC:在我们的案例中,改变有意义吗?_C#_Asp.net_Asp.net Mvc_Webforms - Fatal编程技术网

C#ASP.NET、WebForms到MVC:在我们的案例中,改变有意义吗?

C#ASP.NET、WebForms到MVC:在我们的案例中,改变有意义吗?,c#,asp.net,asp.net-mvc,webforms,C#,Asp.net,Asp.net Mvc,Webforms,我们有一个基于WebForms的web应用程序,具有以下属性: 大型业务对象框架(紧密结合的DAL/业务对象/服务器端验证,类似于CSLA)已预编译并放置在Bin文件夹中。使用大量的用户控件 从MVC的概述来看,似乎在代码的拆分方式上存在着明显的分歧,没有会话状态(这似乎很奇怪,但如果网站主要提供内容,可能还可以),而且构建页面看起来类似于经典的asp(使用标记) 我对MVC有错误的理解吗? MVC仅仅是一种特定的架构,还是事情的发展方式以及WebForms最终将被抛弃? 当现有业务对象框架存在

我们有一个基于WebForms的web应用程序,具有以下属性:

大型业务对象框架(紧密结合的DAL/业务对象/服务器端验证,类似于CSLA)已预编译并放置在Bin文件夹中。使用大量的用户控件

从MVC的概述来看,似乎在代码的拆分方式上存在着明显的分歧,没有会话状态(这似乎很奇怪,但如果网站主要提供内容,可能还可以),而且构建页面看起来类似于经典的asp(使用标记)

我对MVC有错误的理解吗? MVC仅仅是一种特定的架构,还是事情的发展方式以及WebForms最终将被抛弃? 当现有业务对象框架存在时,如何拆分M-V-C? 为什么没有会话状态? 用户控件在MVC中工作吗


我意识到这可能是主观的,所以我主要是想听听你对这个问题的评论,然后自己下定决心。

MVC和WebForms一样,占90%以上,但当然,当每个人都在进行辩论时,他们往往会忽略这一点

您可以根据需要在下面有任意多个层来提供您的数据,是的,您可以使用UserControl样式。与其说是技术上的改变,不如说是观念上的改变。MVC有它的优点,它接受HTTP是无状态的这一事实。Webforms在一定程度上抽象了这一事实,使某些事情变得更容易(例如viewstate)。会话状态、编译……都在那里,都在同一个框架中

简言之:使用你想要的,好好研究它(到处都是范例项目)。如果你深入到一个项目中,考虑到转换的时间,它是学习曲线以及实际的代码时间这个决定取决于你和你的团队,如果太不一样,那么可能不会很有好处,因为需要进行一些调整。如果您对新技术更熟悉,MVC可以更干净……两者都有其用途

我不会在WebForms中启动另一个项目,但那是我自己,我很满意……你真的必须弄清楚你和你的团队觉得哪一个更自然


此外,我还提出了一个很好的观点:以前web项目中的验证或定制逻辑越多,迁移所需的时间就越长。如果您已经有了很好的层分离,那么您就可以更好地进行层分离,如果没有,这是另一个主要的时间考虑因素。

听起来您的域模型和演示文稿之间有很多耦合。如果是这样的话,将需要大量的重新编译。MVC确实支持会话状态,但它不使用ViewState——听起来您有点困惑。它不支持普通用户控件或任何依赖于ViewState的内容。您可以为MVC创建“控件”(称为“部分”视图),这样就有了功能,但形式不同。在MVC中,您的视图与业务模型非常解耦,通常您将拥有一组视图特定的模型,在这两个模型之间进行调解,并且视图强类型化为视图模型,而不是业务模型


虽然我建议将MVC作为基于web的应用程序的更好的体系结构,但在您的情况下,我不确定切换是否有意义(至少现在是这样)。我建议要么坚持使用WebForms(根据Scott Hanselman的说法,WebForms不会消失),要么从新功能(或应用程序)开始,慢慢地将部分迁移到MVC。

MVC是一个闪亮的新瓶子,它与web的工作方式相同

另一方面,您最终可以脱离asp.net视图状态&页面生命周期、回发、疯狂URL等

如果需要从webforms转移到MVC,请查看应用程序UI中可能使用的对第三方控件的依赖性。到目前为止,并不是所有的供应商都有MVC等价物。会话和视图状态是在UI端查看的另一个最重要的方面。如果您有一个面向公众的web应用程序,请考虑将URL添加到书签中。所有这些都可能是迁移到MVC时需要考虑的额外因素


通常,我建议首先将您的代码分解到模型控制器层&一旦完成,然后将UI更改为View&使用MVC的URL路由机制。或者,您可以使用任意合适的URL重写模块&首先发布REST样式的URL,然后将旧URL重写为新URL,然后慢慢地将应用程序的各个部分转换为MVC。

ASP.NET MVC不会阻止您使用会话状态。这只是制作ASP.NET应用程序的一种模式。@Hasan:谢谢,我不知道为什么我会这样认为…+1。这是我见过的对这样一个问题的最明智的回答。如果他们在自定义用户控件中构建了很多模型(包括验证),那么这是一个比你所说的更大的变化——一个完整的重新体系结构,依我看。@tvanfosson-很好的一点,在这里补充了这一点。我认为这完全取决于他们目前的架构。对于我遇到的大多数WebForms项目,我必须同意你的看法……这确实是代码的主要部分……有什么具体的WebForm到MVC的问题,例如usercontrols没有OnLoad/OnPreRender事件等,这些需要重新完成吗?@Mark-实际上,至少没有页面生命周期,不是你现在的想法。这个问题有很好的答案:。您可以使用可移植代码、母版页(实际上是用户控件)等创建用户控件。不过,它们的使用方式略有不同:关于ViewState/Session状态的观点很好,这里肯定会混淆。显然,来自WebForms,我们对SessionState和ViewState有不同的用途。如果我们继续按原样使用会话状态,那没关系