|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
兄弟们,想来你们都看过了昨天的比赛了。我现在的痛苦状跟当时应该差不多。希望本版.net老师不吝赐教,为小弟这一批迷途的羊羔指一条阳光之道!您也知道:学习技术如果只有一个人摸索,那是一件多么痛苦的事情!还有,如果万辛能得名师或长者指点,那又是多么一件幸福和快乐的事情!概述
MVC形式已呈现了几十年了,在GUI范畴已失掉了普遍的使用,因为微软ASP.NETMVCFramework的呈现,以致MVC一度成为.NET社区的热名话题。作为MVC的变种MVP形式,也已呈现好几年了,在微软形式与理论小组供应的WebClientSoftwareFactory中,给出了完成MVP形式的使用程序最好理论,本文将试着对这两种完成对照一二。
MVC(Model-View-Controller,模子-视图-把持器)形式是80年月Smalltalk-80呈现的一种软件计划形式,厥后失掉了普遍的使用,其次要目标在于增进使用中模子,视图,把持器间的存眷的明晰分别。MVP(Model-View-Presenter,模子-视图-暗示器)形式则是由IBM开辟出来的一个针对C++和Java的编程模子,也许呈现于2000年,是MVC形式的一个变种,次要用来断绝UI、UI逻辑和营业逻辑、数据。鄙人面的笔墨中,如无出格申明,MVC均指ASP.NETMVCFramework。
处置流程
关于处置流程方面二者的区分,用上面这两幅图就能够申明统统:
:Model-View-Controller
:Model-View-Presenter
处置流程方面,在MVC中,用户的哀求起首会抵达Controller,由Controller从Model猎取数据,选择符合的View,把处置了局出现到View上;在MVP中,用户的哀求起首会抵达View,View传送哀求到特定的Presenter,Presenter从Model猎取数据后,再把处置了局经由过程接口授递到View。
View区分
ASP.NETMVCFramework中的View能够是一个ASP.NET页面、用户控件大概是母版页。必要分离s承继于ViewPage、ViewUserControl、ViewMasterPage。示例代码:- publicpartialclassViews_Blog_New:ViewPage{}
复制代码 接纳行内代码举行数据的出现,固然也能够利用服务器控件,示例代码:- <h2>ASP.NETMVCFrameworkSample</h2><hr/><%=Html.ActionLink("Home","Index")%>|<%=Html.ActionLink("NewPost","New")%><div><%foreach(PostpostinViewData){%><divclass="postitem"><strong>Title</strong>:<%=Html.Encode(post.Title)%></br><strong>Author</strong>:<%=Html.Encode(post.Author)%></br><strong>PubDate</strong>:<%=Html.Encode(post.PubDate.ToShortDateString())%></br><strong>Content</strong>:<%=Html.Encode(post.Description)%></br><%=Html.ActionLink("Edit",new{action="Edit",Id=post.Id})%></div><br/><%}%></div>
复制代码 在MVP中,仍旧接纳WebForm模子,个中View分为View接口和View完成两部分,完成部分能够是ASP.NET页面、用户控件大概母版页:- publicinterfaceIProductDetail{stringName{set;}stringBrand{set;}}
复制代码- publicpartialclassProducts_ProductDetail:Page,IProductDetail{}
复制代码 利用服务器控件举行出现(也能够是HTML控件):- <asp:ContentID="content"ContentPlaceHolderID="DefaultContent"Runat="Server"><h1>ProductDetail</h1><p>称号:<asp:LabelID="lbl_Name"runat="server"Text=""></asp:Label></p><p>品牌:<asp:LabelID="lbl_Brand"runat="server"Text=""></asp:Label></p></asp:Content>
复制代码 Controller和Presenter
ASP.NETMVCFramework中,一个View在全部使用程序中能够被多个Controller所挪用。- publicclassPostController:Controller{[ControllerAction]publicvoidNew(){RenderView("New");}}publicclassBlogController:Controller{[ControllerAction]publicvoidNew(){RenderView("New");}}
复制代码 MVP中一个View在全部使用程序中只对应一个特定的Presenter:- publicpartialclassProducts_ProductDetail:Page,IProductDetail{privateProductDetailPresenter_presenter;protectedvoidPage_Load(objectsender,EventArgse){if(!this.IsPostBack){this._presenter.OnViewInitialized();}this._presenter.OnViewLoaded();}[CreateNew]publicProductDetailPresenterPresenter{set{this._presenter=value;this._presenter.View=this;}}}
复制代码 对开辟历程的影响
在ASP.NETMVCFramework中,接纳行内代码举行数据出现,逻辑会合在Controller中,可是View没法完整交给UI计划职员完成。在MVP形式中,一切的营业逻辑交给Presenter去向理,如许View中代码就变得及其简便,将能够容易的把开辟职员和UI计划职员分隔,以下图所示:
不过你如果学.net的话,你就不要选os了,这课比较底层的。你可以旁听数据库加上软件构件和中间件。(webservices和面向服务的课也应该听一听) |
|