2010-12-07 89 views
9

我的公司正在试图就如何追求未来发展做出明智的决定。ASP.NET MVP vs ASP.NET MVC

我们似乎已经将我们未来的内部和外部应用程序缩小为Web应用程序。但从这一点来看,我们仍有点困惑。

这里有大量的Sharepoint支持。据我了解,Sharepoint基本上是使用MVP的ASP.NET。

其他人想使用正常的ASP.NET使用较新的MVC风格。

我也被告知这些不容易在一起玩。

它看起来像Sharepoint(和ASP.NET MVP)将成为赢家。在我们走向这个方向之前,我想问:

如果我们选择将Sharepoint(即ASP.NET和MVP)的未来5-10年的开发工作基于此,我们放弃了什么?这是一件大事,或者只是一些“很高兴有”,我们正在失去。

(它必须是一个相当大的交易得到管理层现在改变方向。)

+0

是不是WCSF微软的MVP? – 2010-12-07 15:26:24

+6

SharePoint不是ASP.Net MVP。它不能与MVC进行比较。从维基百科:“Microsoft Sharepoint是一种基于Web技术的服务器,可用于构建门户网站,协作网站以及内容管理网站。它具有多种功能,支持各种企业和Web场景。它也受欢迎的文件管理解决方案# – jgauffin 2010-12-07 15:29:05

+0

@Yuriy是的Web客户端软件工厂是MVP的MS实施。与我一起工作非常繁重,以及我最后一次使用它的经验(围绕.NET 3.0,不,我不是说3.5),该项目甚至无法正常工作,它仅仅因为尝试绑定而面临大量基本的IOC解析失败标准MVP页面。这是什么导致我创建我的MVP框架 – 2010-12-07 15:39:48

回答

11

无论发生什么,WebForms的会变成一个大丑乱在一些点。如果您必须使用webforms,请不要使用回发和页面lifycycle模型 - 使用带有演示者获取请求的aspx页面,并且每个帖子都有一个处理程序或空的aspx。这会让MVC感觉更像MVC

2

无论您使用MVVM,MVC还是MVP,我一直都非常支持关注分离(SOC),这三种模式都非常好。有了这完全特定于ASP.NET,我会说你应该使用MVC3。

我一直是一个.NET开发人员多年,现在写了我的MVP模式,它建立在StructureMap之上(我的博客上有很多关于它的内容),并且我从来没有看到处理相关更改的好处从离开webforms到转到MVC。然而,在处理ASP.NET这么长时间之后,我刚刚用ASP.NET webforms错误完全不受我控制。

WebForms的主要错误发生在ViewState超时导致通用密码异常,第二个是ViewState只是被客户端截断或者以某种方式导致合法加密错误发布的地方。有了MVC,这些错误就不再适用了。在.NET4中,我试图创建一个没有ViewState的webforms应用程序,它们在.NET4中添加了新的功能,并且完全没有工作,因为webform时间已经过去了。

在MVC,MVC2和MVC3中,MVC3和Razor视图引擎附带的功能集是最强大的。除了可以使用Razor视图引擎创建的更清晰的视图外,您还可以获得MVC2附带的所有增强功能,除此之外,您还可以获得全局动作过滤器和烘焙过的jQuery客户端模板(我90%确定)。

我也会接近MVC非常类似于MVVM,其中我将有3个不同的实体集,我的视图模型,我的域实体和我的物理数据库模型。(最后一组可能或可能不是域实体,我已经开始意识到试图让您的纯域实体与您的数据库层协同工作可能在高级阶段并不理想)

9

我会说你选择什么很大程度上取决于您的开发人员以及您打算构建的应用程序类型。

如果你建立很大程度上CRUD样的应用程序,使大量使用第三方(或自己)的自定义控件的,然后用Web表单住可能是一个好主意。

如果你建立主要是“网络”风格的应用程序有很多的客户端功能,然后MVC是一个更好的选择。

如果你有很大的新手开发者,Webforms可能会更好。如果你有更多有经验的开发人员,即使他们对asp.net不熟悉,那么MVC也许是更好的选择。

如果您正在构建复杂的互连非常以数据为中心的应用程序,然后MVC可能是一个更好的选择。

有很多原因,你可能会选择一个或另一个,它总是“这取决于......”。

此外,MVC和Webforms不完全不兼容。您不能在同一个网页中使用它们,但可以在同一个网站中使用它们。此外,就像上面的评论所说,Sharepoint本身不是Webforms或MVP ..它是基于webforms的自己的东西。这非常“Webpart”导向,这只是一种说法,建立大量自定义控件。

0

根据我的经验,对于以数据为中心的复杂LOB应用程序,强制执行的MVP模式已经好很多。

由于演示者不了解网络中心概念,所以MVP提供了更高的分离度。 由于视图中没有条件代码,代码覆盖率也会增加。 我们有几个应用程序,在Web和Windows应用程序之间使用演示者。 您演示referes到视图的完整抽象,asp.net MVC依靠鉴于家属的抽象(HttpContextBase等)

这一切说你需要这样的设计在网页表单,它不开箱,但如果你第一次做对了,并让开发者理解并坚持下来,你最终会得到一个非常干净的解决方案。

有一些坚实的框架存在,以支持MVP在web表单:

http://www.codeguru.com/csharp/.net/net_general/patterns/article.php/c15173

webformsmvp点com和。

2

如果要执行页面后背上来处理事件,我建议MVP的演示将包含该视图的所有版本的事件处理程序(不同的用户界面,比如网页,iPhone,安卓,Windows窗体) ,具有统一的行为。换句话说,您不需要在每个视图的代码隐藏中编写控制事件。至少,他们只会调用Presenter的事件处理程序方法或引发Presenter处理的事件。

如果要创建Web应用程序和大量使用Ajax的网页更新,与一个或多个网站的观点和跨浏览器的JavaScript库,如jQuery,我会建议MVC。

所以这取决于你想如何处理页面事件。 MVP & MVC都有分离的担忧。MVP更多基于服务器,更容易添加多个UI,MVC更基于客户端,用于事件处理和更多以网络为中心。