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

Mar*_*man 9 c# asp.net asp.net-mvc webforms

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

大型业务对象框架(Close knit DAL/Business Objects/Serverside验证,类似于CSLA)预编译并放置在Bin文件夹中.使用了很多UserControls.

看看MVC的概述,似乎对代码如何拆分存在明显的分歧,没有会话状态(这似乎很奇怪,但如果网站主要提供内容可能还可以吗?)并且看起来构建页面看起来类似于经典asp(使用<%%>标签)

我对MVC有错误的解释吗?MVC只是一个特定的架构,或者是事情的发展方式,WebForms最终会被删除?当现有的业务对象框架存在时,如何拆分MVC?为什么没有会话状态?UserControls在MVC中工作吗?

我意识到这可能是主观的,所以大多数都在寻找你对这个主题的评论来让我自己的想法.

Nic*_*ver 11

MVC与WebForms的90%+相同,但当然每个人都在进行辩论时,他们往往会把这个问题留下来.

您可以根据需要在下面提供尽可能多的图层来提供yor数据,是的,您可以执行UserControl样式.这更像是一种思维方式的改变而不是技术的改变.MVC有它的优点,它包含了HTTP 是stateleess这一事实.Webforms在一定程度上抽象了这个事实,使一些事情变得更容易(例如,查看状态).会话状态,编译......它就在那里,它位于两者之下的同一框架中.

简而言之:使用您想要的东西,研究得很好(示例项目无处不在).如果你深入研究项目,需要及时考虑转换,它是学习曲线以及实际的代码时间. 这个决定取决于你和你的团队,如果它太不同了,那么它可能不是很有益,因为有一些调整.如果你对新技术感觉更舒服,MVC可以更清洁...... 两者都有其用途.

我不会在WebForms中启动另一个项目,但那就是,以及我对此感到满意......你真的必须弄清楚哪种感觉更自然,如果适用,你的团队.

此外,tvanfosson提出了一个很好的观点:更多的验证或者之前在Web项目中的任何自定义逻辑,移动所需的时间就越多.如果你已经拥有了很好的层次分离,那么你处于更好的位置,如果没有,这是另一个主要的时间考虑因素.

  • 如果他们已经在自定义UserControls中构建了很多模型(包括验证),那么这是一个比你指示的更大的变化 - 一个完整的重新构建,IMO. (2认同)
  • @Mark - 实际上,根本没有页面生命周期,至少,不是你目前的想法.这个SO问题有很好的答案:http://stackoverflow.com/questions/460145/what-is-the-page-lifecycle-of-an-asp-net-mvc-page-compared-to-asp-net -webforms.您可以使用可移植代码,母版页(实际上是用户控件)等来创建用户控件.它们的使用方式有所不同:http://www.matthidinger.com/archive/2008/02/21/asp.净MVC-用户控件 - 开始 - finish.aspx (2认同)

tva*_*son 6

听起来你的域模型和演示文稿之间有很多耦合.如果是这样的话,需要进行大量的重新设计.MVC确实支持Session状态,但它不使用ViewState - 听起来你有点混乱.它不支持普通的UserControl或任何依赖于ViewState的东西.您可以为MVC创建"控件"(称为"部分"视图),以便功能存在,但形式不同.在MVC中,您的视图与业务模型非常分离,通常您将拥有一组特定于视图的模型,这两个模型在两者之间进行调解,并且视图是强类型的视图模型,而不是业务模型.

虽然我建议将MVC作为基于Web的应用程序的更好架构,但在你的情况下,我不确定切换是否有意义(至少现在).我建议坚持使用WebForms(根据Scott Hanselman不会消失)或者从新功能(或应用程序)开始慢慢迁移到MVC.

  • MVC中没有服务器端控件.您通常通过模型绑定到操作参数来获取数据,或直接从请求(或通过值提供程序)获取数据.你会发现整个范例是不同的 - 一方面,你可以每页多个表格,每个表格都回归自己的​​行动.IMO也更容易使用AJAX,因此当您将用户留在页面上并在后台异步处理请求时,缺少状态就不那么重要了 - 不需要整个表单的往返. (2认同)