`

[Silverlight入门系列]使用MVVM模式(1):MVVM核心概念

    博客分类:
  • MVVM
阅读更多

MVVM模式是Model、View、ViewModel的简称,最早出现在WPF,现在Silverlight中也使用该模式,MVVM模式是对MVC模式的变种。哪儿变了?我认为MVVM和MVC的主要变化在于MVVM更适合于XAML。

2011-05-03 14h43_20

MVVM模式和MVC模式一样,主要目的是分离视图(View)和模型(Model),有几大好处:

1. 低耦合。视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的"View"上,当View变化的时候Model不可以不变,当Model变化的时候View也可以不变。

2. 可重用性。你可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。

3. 独立开发。开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计,使用Expression Blend可以很容易设计界面并生成xaml代码。

4. 可测试。界面素来是比较难于测试的,而现在测试可以针对ViewModel来写。

mvvm

如果用Interface接口来表达,基本就是这么个意思:

1 public interface IView 2 { 3 IViewModel ViewModel { get; set; } 4 } 5 6 public interface IViewModel 7 { 8 IModel Model { get; set; } 9 10 /// <summary> 11 /// a property that states the controller is busy doing something (like fetching data from a service), 12 /// usually the iterface should be blocked 13 /// </summary> 14 bool IsBusy { get; } 15 }

MVVM_1

MVVM的Model、View、ViewModel分工

1. View

  • 负责界面和显示,界面构成元素有window, controls, page, dataTemplete, custom controls….
  • 代码通常有XAML和XAML.CS组成,但后台代码应该很少
  • 通过DataContext和ViewModel绑定
  • 不直接和Model交互!
  • 控件可以和ViewModel的公共属性绑定,update需要双向绑定
  • 控件可以触发Behavior/Command调用ViewModel的方法,Command是View到ViewModel的单向通讯 (View中触发事件,ViewModel中处理事件)

2. ViewModel

  • 主要包括界面逻辑和模型数据封装,Behavior/Command事件响应,绑定的属性定义等
  • ViewModel继承Model类,或者是Model的继承类
  • 是view和model的桥梁,是对Model的抽象,例如,model中数据格式是“年月日”,可以在viewModel中转换model中的数据为“日月年”以供视图(view)显示。
  • 维护视图状态
  • 实现属性或集合的change notification

3. Model

  • 数据和业务逻辑
  • 客户端领域模型
  • 由data entities, business objects, repositories and services构成
  • 可以实现属性或集合的change notification
  • 可以实现validation 接口例如 IDataErrorInfo

MVVM

View和ViewModel主要通过数据绑定和Command/Behavior进行交互,如下图所示:

2011-05-03 10h24_31

一个例子并且附代码下载(Command未示例)

有关Model(模型)和DTO的问题

2011-05-03 17h33_31

前面说的Model是客户端的,但实际上Domail Model存在服务器端(靠近数据库)和那就需要和客户端搞映射DTO(Data Transfer Ojbect,数据传输对象,带序列化标记,用来远程调用)。在Silverlight中有个很方便的东西来实现这个DTO过程和序列化,那就是WCF RIA Service和DomainService。如果你创建一个简单的Silverlight应用并且调用WCF RIA Service,基本上会生成DTO Model: ObjectContext(EntityObject)。(也有人喜欢在Model里面调用RiaSerivce实现load,save等等,个人认为不太合适,可以参考这篇文章

DataFlow

代码例:

public partial class MyModelsEntities : ObjectContext { … } [EdmEntityTypeAttribute(NamespaceName="MyModels", Name="MyEntity")] [Serializable()] [DataContractAttribute(IsReference=true)] public partial class MyEntity: EntityObject { … }

MVVM的实践要点

1. View分离要彻底,不要有坏味道

视图(view)部分,xaml.cs 应该只有很少的代码或没有代码,如果你的xaml.cs包含大量的代码,那么很可能你MVVM用的不对头,需要检查其中代码的坏味道。Xaml和xaml.cs 只能包含处理界面、视图、显示样式、视图元素之间的交互、视图元素动画,等等的内容

2. ViewModel要可测试

从重构的观点看,如果你的代码中ViewModel是可测试的,有详细的单元测试Unit Test,你的代码是OK的,否则需要检查其中的坏味道。

MVVM Basic

引用地址:http://www.cnblogs.com/mainz/archive/2011/05/03/2035558.html

分享到:
评论

相关推荐

    如何创建更好的Silverlight程序系列课程(3):Silverlight & MVVM

    接下来,我们进入MVVM的核心概念。MVVM模式由三个主要组成部分组成:模型(Model)、视图(View)和视图模型(ViewModel)。模型是应用程序的数据源,通常对应于数据库或其他数据存储。视图是用户界面,用户通过它与...

    Silverlight中使用MVVM

    1. **MVVM 模式的概念** MVVM 模式由微软的 WPF 平台引入,随后也被广泛应用于 Silverlight 开发。它的核心思想是通过绑定机制将 View 与 ViewModel 关联起来,使得 View 可以自动反映 ViewModel 的变化,而 ...

    使用Command机制实现的Silverlight4.0多层MVVM模式简单案例

    **MVVM设计模式详解** MVVM(Model-View-ViewModel)设计模式是...通过了解并实践这个案例,开发者可以掌握MVVM的核心概念,如Model、View、ViewModel以及Command的用法,为进一步深入Silverlight开发打下坚实基础。

    Silverlight探秘系列课程(1):创建第一个Silverlight应用

    通过本课程的学习,你将掌握创建基本Silverlight应用所需的技能,包括界面设计、事件处理、数据绑定等核心概念。随着深入学习,你将能够开发出更复杂、功能丰富的Silverlight应用,为用户提供卓越的Web体验。附带的...

    Silverlight中使用MVVM.pdf

    ### Silverlight中使用MVVM详解 #### 一、MVVM模式简介 MVVM(Model-View-ViewModel)模式是一种软件架构设计模式,主要用于简化用户界面的开发与维护工作。此模式将应用程序分为三个核心组件:Model(模型)、...

    Silverlight MVVM模式

    **Silverlight MVVM模式** MVVM(Model-View-ViewModel)模式是软件开发中的一个设计模式,尤其在创建用户界面时被广泛采用。在Silverlight应用程序中,MVVM模式能够帮助开发者实现清晰的代码结构,提高可测试性,...

    Pro WPF and Silverlight MVVM

    - **数据绑定**:MVVM 中的核心概念之一就是数据绑定。WPF 和 Silverlight 都提供了强大的数据绑定功能,使得开发者能够轻松地将视图中的元素与模型数据进行绑定。 - **命令**:在 MVVM 架构中,命令模式被用来封装...

    silverlight mvvm demo

    本篇文章将通过分析“silverlight mvvm demo”这个学习示例,详细讲解Silverlight平台下MVVM模式的核心概念、实现机制以及实际应用。 首先,我们需要理解MVVM模式的基本原理。MVVM是软件设计模式中的一种,由...

    silverlight MVVM

    **MVVM模式的核心概念** 1. **模型(Model)**:模型层负责业务逻辑和数据处理,它封装了应用程序的数据源,通常与数据库或其他数据存储进行交互。在这个案例中,由于描述提到没有使用数据库,模型可能包含的是内存...

    Silverlight入门指南

    - **核心概念**:Silverlight是一个插件技术,用于在Web页面中嵌入多媒体和交互式内容。它基于.NET Framework,提供了丰富的图形、动画和视频播放功能。 - **版本历史**:Silverlight经历了多个版本的迭代,从1.0到...

    Pro WPF and Silverlight MVVM - Effective Application Development with MVVM

    此书由 Gary McLean Hall 著作,并详细介绍了如何使用 MVVM 模式来构建 Windows Presentation Foundation (WPF) 和 Silverlight 应用程序。 #### 二、MVVM 架构简介 MVVM 架构是一种软件架构设计模式,主要应用于...

    Apress.-.Pro.WPF.and.Silverlight.MVVM.2010

    《专业WPF与Silverlight MVVM》一书全面覆盖了WPF和Silverlight下的MVVM模式应用,包括基础概念、设计原则、实践技巧以及如何利用该模式构建复杂的应用程序。作者通过丰富的示例和详尽的解释,帮助读者理解MVVM模式...

    微软silverlight探秘教程(20集):网络通信与开发示例

    Model-View-ViewModel (MVVM)设计模式在Silverlight中广泛使用,为大型应用的架构提供了一种高效组织代码的方式。 6. **集成Visual Studio 2008**:作为微软的开发工具,Visual Studio 2008提供了对Silverlight的...

    Silverlight 2.0 发现之旅系列课程(1):Silverlight 2.0 北极站

    综上所述,"Silverlight 2.0 发现之旅系列课程(1):Silverlight 2.0 北极站"将引导初学者和经验丰富的开发者全面理解Silverlight 2.0的核心概念和技术,从而能够创建出高效、互动的Web应用程序。通过深入研究并实践...

    MVVMLight.zip

    这个框架提供了一系列工具和库,帮助开发者遵循MVVM设计模式,实现更加模块化、可测试且易于维护的代码。 **1. MVVM模式介绍** MVVM模式是一种软件设计模式,它将用户界面(View)与业务逻辑(ViewModel)分离,...

    silverlight+MVVM+PRISM经典示例

    5. **命令(Command)**:MVVM模式中,ViewModel通过实现ICommand接口或使用DelegateCommand、RelayCommand等实现命令,使得视图可以响应用户操作,而无需直接操作视图元素。 6. **事件总线(EventAggregator)**:...

Global site tag (gtag.js) - Google Analytics