Silverlight MVC框架学习:基于Cairngorm的Silverlight开发

基于CairngormSilverlight开发 - part1

基于CairngormSilverlight开发 - part1

概述

简单的说Cairngorm是在Silverlight开发中的一个轻量级的MVC开发框架。
flashflex开发中的Cairngorm框架一样,Cairngorm是能将程序代码按照逻辑功能(数据、视图、控制)分块的一种开发模型,这个模型被称为MVCModel模型、View视图、Control控制)模型。

获取

请访问项目网站 下载页面

Cairngorm的各个部分

ModelLocator模型:一个储存程序中所有值对象的地方,并使用单件模式共享变量。与网站开发中的Session很相似,不同的是他不存在于服务器端而是存在于客户端。
View
视图:也就是Silverlight中的自定义用户控件UserControl,可以与ModelLocator中的数据进行绑定,并对用户的操作(点击、鼠标滑过、滑出等)抛出自定义的事件CairngormEvent
Command
命令:处理业务逻辑,更新ModelLocator中储存的数据。
FrontController
前端控制器:接受View视图抛出的自定义的事件CairngormEvent并将他们映射到与之相对应的Command命令上。

各个部分如何联系在一起

大体工作流程:客户端的界面由View视图(自定义用户控件UserControl)组成,View通过使用Silverlight中的双向数据绑定BindingModelLocator中的数据进行绑定并显示。View根据用户的一些操作比如点击、鼠标滑过等抛出自定义的事件CairngormEvent,这些事件被FrontController监听并将其映射到与之相对应的Command命令上进行业务逻辑等处理并更新ModelLocator中的数据。由于View是与ModelLocator绑定的,当ModelLocator更新是View也会自动更新。 

 

基于CairngormSilverlight开发 - part2

2009-03-12 16:35 by nasa, 1694 visits, 网摘, 编辑

 

搭建架构

 

由浅入深的来搭建架构。

 

ModelLocator开始

ModelLocator只是Cairngorm中的一个部分,要使用它并不一定要把Cairngorm所有的架构都搭建起来,ModelLocator是可以单独来使用的。

ModelLocator
Silverlight程序中的一个数据的容器,所有的数据都存在于一个类中"singleton class"。这个类有且仅有一个实例。他使用的是设计模式中的单件模式。(这里我也不多说了,李老师已经说的很清楚了。ModelLocator,简约而不简单)

这里举例来说明一下ModelLocator具体的用法。一个最简单的例子,我想通过Silverlight中的Slider控件来控制一个矩形RectangleWidth属性。

首先建立Silverlight项目并在项目网站上获取Cairngorm,添加对其的引用。在项目中新建立文件夹Model用来存放ModelLocator模型,建立MyModelLocator类并继承自ModelLocator,套用单件模式,并声明一个属性。


    
public class MyModelLocator : ModelLocator
    {
        
private static readonly MyModelLocator _instance = new MyModelLocator();

        
public static MyModelLocator Instance { get { return _instance; } }

        
static MyModelLocator(){}
        
private MyModelLocator()
            : 
base(){}

        
private double _width = 200;
        
public double width
        {
            
get { return _width; }
            
set
            {
                _width = value;
                NotifyPropertyChanged(
"width");
            }
        }
    }

 

 

切换到Blend工具添加两个控件:RectangleSlider。并起好实例名称。换回到Vs工具,指定当前的page页面包含的数据为刚刚建立的MyModelLocator类,对两个控件进行数据双向绑定,绑定RectangleWidthProperty属性和SliderValueProperty属性到MyModelLocatorwidth属性上。

    public partial class Page : UserControl
    {
        
public Page()
        {
            InitializeComponent();

            
this.Loaded += new RoutedEventHandler(Page_Loaded);
        }

        
void Page_Loaded(object sender, RoutedEventArgs e)
        {
            
this.DataContext = MyModelLocator.Instance;
            Binding bindwidth = 
new Binding("width");
            bindwidth.Mode = BindingMode.TwoWay;
            xRectangle.SetBinding(UserControl.WidthProperty, bindwidth);

            xSlider.SetBinding(Slider.ValueProperty, bindwidth);
        }
    }

Cairngorm框架精要
1
绑定
2
集中事件管理机制
3
代理

1
绑定
 
要绑定的对象放在vo这个包了,这里的绑定数据是view包的视图数据,更新 数据是通过ModelLocator这个单例来管理,通常是在business这个包更新这个数 据,然后通过ModelLocator绑定通知view包下的视图更新.
集中事件管理机制
  
要知道这个工程的所有事件,只要查看control这个包,addCommand来管理所有事件发送事件通常是在view这个包发出,然后通过control包下的Controller统一管理,然后在commands包接收事件,用代理去处理事件
3
代理
 
说到代理,在发送事件之前要在event设置个代理点。

ps:
这个框架同我一直做来的as2竟然有相似之处,唯一不同的是有个addCommand  

posted @ 2009-09-23 17:29  书奎  阅读(1506)  评论(0编辑  收藏  举报