快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

永利皇宫463的网址:浅谈MVP与ModelViewViewModel(MVVM)设计模式



微软的WPF带来了新的技巧体验,如Sliverlight、音频、视频、3D、动画……,这导致了软件UI层加倍细节化、可定制化。同时,在技巧层面,WPF也带来了

诸如Binding、Dependency Property、Routed Events、Command、DataTemplate、ControlTemplate等新特点。MVVM(Model-View-ViewModel)框架

的由来就是MVP(Model-View-Presenter)模式与WPF结合的利用要领时成长蜕变过来的一种新型架构框架。它容身于原有MVP框架并且把WPF的新特点揉合进去

,以应对客户日益繁杂的需求变更。

WPF的数据绑定与Presentation Model相聚拢是异常好的做法,使得开拓职员可以将View和逻辑分离出来,但这种数据绑定技巧异常简单实用,也是WPF所特有

的,以是我们又称之为Model-View-ViewModel (MVVM)。这种模式跟经典的MVP(Model-View-Presenter)模式很相似,除了你必要一个为View量身定制的

model,这个model便是ViewModel。ViewModel包孕所有由UI特定的接口和属性,并由一个 ViewModel 的视图的绑定属性,并可得到二者之间的疏松耦合,以是

必要在ViewModel 直接更新视图中编写响应代码。数据绑定系统还支持供给了标准化的要领传输到视图的验证差错的输入的验证。

如下图MVP设计模式架构所示。

在视图(View)部分,平日也便是一个Aspx页面。在曩昔设计模式中因为没有清晰的职责划分,UI 层常常成为逻辑层的全能代理,而后者实际上属于利用

法度榜样永利皇宫463的网址的其他层。MVP 里的M 着实和MVC永利皇宫463的网址里的M是一个,都是封装了核心数据、逻辑和功能的谋略关系的模型,而V是视图(窗体),P便是封装了窗体中的所有操

作、响利用户的输入输出、事故等,与MVC里的C差不多,差别是MVC是系统级架构的,而MVP是用在某个特定页面上的,也便是说MVP的机动性要远弘远年夜于MVC

,实现起来也极为简单。

我们再从IView这个interface层来解析,它可以赞助我们把种种UI与逻辑层解耦,同时可以从UI层进入自动化测试自动化测试(Unit/Automatic Test)并提

供了进口,在曩昔可以由WinForm/Web Form/MFC等编写的UI是经由过程事故Windows消息与IView层沟通的。WPF与IView层的沟通,最佳的手段是应用Binding

,当然,也可以应用事故;Presenter层要实现永利皇宫463的网址IView,多态机制可以包管运行时UI层显示恰当的数据。比如Binding,在法度榜样中,你可能看到Binding的Source是

某个interface类型的变量,实际上,这个interface变量引用着的工具才是真正的数据源。

MVC模式大年夜家都已经异常认识了,在这里我就不赘述,这些模式也是依次进化而形成MVC—>MVP—>MVVM。有一句话说的好:当物体受到接力的时刻,凡是有

界面的地便利是最轻易被撕下来的地方。是以,IView作为公共视图接口约束(左券)的一层意思;View则能传达解耦的一层意思。

下面先容一下MVVM设计模式。由于WPF技巧呈现,从而使MVP设计模式有所改进,MVVM 模式就是应用的是数据绑定根基架构。它们可以轻松构建UI的需要元素。

如,下图所示MVVM架构图。

可以参考The Composite Application Guidance for WPF(prism),pr永利皇宫463的网址ism V2下载源码

View绑定到ViewModel,然后履行一些敕令在向它哀求一个动作。而反过来,ViewModel跟Model通讯,奉告它更新来相应UI。这样便使得为利用构建UI异常

的轻易。往一个利用法度榜样上贴一个界面越轻易,外不雅设计师就越轻易应用Blend来创建一个漂亮的界面。同时,当UI和功能越来越松耦合的时刻,功能的可测试性就

越来越强。

在MVP模式中,为了让UI层能够从逻辑层上分离下来,设计师们在UI层与逻辑层之间加了一层interface。无论是UI开拓职员照样数据开拓职员,都要尊重永利皇宫463的网址这个

左券、按照它进行设计和开拓。这样,抱负状态下无论是Web UI照样Window UI就都可以应用同一套数据逻辑了。借鉴MVP的IView层,养成习气。View Model听

起来比Presenter要贴切得多;会把一些跟事故、敕令相关的器械放在Controler里。

参考示例:PersonViewModel层

public FamilyTreeViewModel(Person rootPerson)

{

_rootPerson = new PersonViewModel(rootPerson);

_firstGeneration = new ReadOnlyCollection

(

new PersonViewModel[]

{

_rootPerson

});

_searchCommand = new SearchFamilyTreeCommand(this);

}

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: