- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
MVP+WCF+三层结构搭建项目框架
最近,我一直在重构之前做的一个项目,在这个过程中感慨万千。原先的项目是一个运用了WCF的C/S系统,在客户端运用了MVC模式,但MVC的View、Model耦合以及WCF端分布式欠佳等问题让我有了重构的想法,经过了一段时间的改造,逐渐形成了MVP+三层结构+WCF的面向服务的程序架构。在这里我把我的想法写成了一个例子,供大家参考。
在正式开始讲解之前,我必须得感谢Artech、代震军等诸多大虾,他们的文章给了我很大的启发。
我写的这个例子是关于博客管理的,逻辑很简单,就是用户发表文章、发表评论,管理员可以对用户进行管理。让我们先从MVP的运用开始讲起。
MVP与MVC的选择
关于MVP和MVC,我只谈谈在重构过程中的看法。在经典的MVC中,View会通过Controller调用Model中的方法,Model被更新后会立即通知View,因此View与Model还是存在一定程度的耦合的,Controller也只是作为一个简单的消息分发器,View与Controller也紧紧的贴合好像是一个整体。而在MVP中,Presenter代替Controller而出现,成为View与Model解耦的关键,在MVP中,Presenter掌管大权,View的请求提交给Presenter,由Presenter调用Model,Model更新后的状态再返回给Presenter,由Presenter控制View进行相应的显示。如此,Model与View被完全解耦,View与Controller也形成了单向依赖。MVC与MVP可以说各有特点,但我更倾向于MVP。
关于MVC和MVP,给大家看这两张图就很明白了。对于刚接触MVP的朋友可能不知道View、Presenter和Model中具体该实现哪些东西,我会在用实例讲解的时候告诉大家我的想法。
MVP实战运用
在确定使用MVP模式之后,我给我的博客程序安排了如下几个项目:
1、Main:主程序入口点。
2、Common:存放委托和公共组件等。
3、Model:MVP中的M,注意区别于三层中的Model。
4、Presenter:MVP中的P。
5、View:MVP中的V。
6、DTO:这个项目其实和三层中的Model作用是一样的,但是我为了区别于MVP中的Model,把它叫做DTO,其实它的作用就是一个DTO。
项目之间的引用关系是这样的:
Main直接调用Presente启r动程序。Presenter与View,Presente和rModel分别都是单向引用,而View和Model完全没有任何联系。View和Presente需r要引用Common,使用其中的一些公共组件,而DTO作为
存放数据传输对象的项目View、Presenter和Model必须都要引用。
在搭建好项目框架之后,我们可以先从Model入手,因为Model是业务逻辑的所在地,是数据的提供者,它完全基于用例的。按照本例需求,分析出三个实体,分别是User(用户),Note(文章),Comment(评论),我们就以User为例,写一个Model。代码如下所示:
ViewCode
///summary
///Theinterfaceofusermodel
////summary
publicinterfaceIUserGroup
{
#region--Methods--
///summary
///Getallusers
////summary
///returnsUsers/returnsIListUserGetAllUsers();
///summary
///Getuserbyuserid
////summary
///paramname=idtheuserid/param
///returnsUser/returns
UserGetUserById(stringid);
///summary
///Updateuser
////summary
///paramname=usertheuser/paramvoidUpdateUser(Useruser);
///summary
///Deleteuserbyuserid
////summary
///paramname=userIdtheuserid/paramvoidDeleteU
您可能关注的文档
- Metasys楼宇自控系统概述.docx
- MFC对话框的建立.docx
- MGTC3021 4G全网通数据传输模块技术参数.docx
- Microsoft Outlook 2010 在何处保存我的信息和设置?.docx
- midasgen学习总结讲解共8页.docx
- MilliQ Synthesis 超纯水系统 中文使用说明书.docx
- MIMO无线通信系统中的空时编码与预编码研究.docx
- minicom使用tftp调试开发板配置说明.docx
- MLC证书分析和总结.docx
- MODBUSTCPIP协议书范本分析和总结.docx
- MW级变速变桨风力发电机组系统振动故障诊断技术与减振降载方法研究.docx
- My Impression of the Film The Blind Side分析和总结分析和总结.docx
- My new neighbor 情感态度目标教学设计.docx
- My new neighbor 阅读学习策略设计片段.docx
- My New Neighbor读写教学设计.docx
- my room英语作文带翻译.docx
- my school life英语作文附翻译.docx
- mydreamjob英语作文翻译.docx
- MYERSBRIGGS性格测试分析和总结.docx
- Mynewteachers单元教案分析和总结.docx
文档评论(0)