Silverlight 框架
刚开始接触Silverlight就有幸看到guozili 关于“基于Silverlight的精简框架”的博文,不但言简意赅,而且实现的效果也是夺目三分。我已经在其基础上开发了自己的Siliverlight作品,当时感觉他的框架数据服务部分稍微麻烦了点,因为直接添加web 引用的方法来访问web services 或者 wcf 实现数据交互已经相当简单了。可后来发现web services 一旦更新,相应的web引用也要更新一次,而且部署的时候还有修改配置文件的web连接,确实是麻烦多多,也很难把这些web访问的方法common一下。现在回顾这篇文章,顿时茅塞顿开。古语有句话说的非常好:温故而知新。现在我又重新从这篇文章里吸收到其中的精华了。
废话少说,现在直接贴出作者的博文来让大家认识一下:
Silverlight 的数据请求需要架设wcf、webservice或者webclient,而且中间数据需要序列化和反序列化,或者自己用linq解析,易用性不是很强, 且比较麻烦,基于目前还没有统一和规范的silverlight开发模式,所以从五六个自己做过的基于Silverlight的中型项目,抽出核型代码形 成一套精简框架,方便调用,扩充和分布式部署。
项目文件说明:
EasySL.Controls 封装了一些基于Silverlight的自定义控件,目前还没加进来
EasySL.Core 请求数据,返回数据的json序列化和反序列化机制,较之webservice xml性能好些
EasySL.Core.SL 和上面一样,Silverlight项目用
EasySL.Data 数据访问层实现
EasySL.Data.Interface 数据访问层接口
EasySL.Entity 实体层
EasySL.Service 业务逻辑,数据加工,缓存处理
EasySL.Share 一些常用helper
EasySL.Server Remoting server
EasySL.UI Silverlight主控件
EasySL.Web asp.net主页面
部署方式:
1.web.config里设置ServerEnable为false,将不需要开启remoting server,由web层直接请求业务逻辑层(EasySL.Service)
2.web.config里设置ServerEnable为true,然后启动remoting server(EasySL.Server),
将由remoting server代理访问业务逻辑层,易于分布式部署
简单使用:
// 初始化一个task
this .getProductListTask = new Task();
// 初始化请求数据
getProductListTask.BeforeStart += new EventHandler < EventArgs > (getProductListTask_BeforeStart);
// 回调时更新界面
getProductListTask.Callback += new GetDataAsyncCompleted(GetProductListCallBack);
void getProductListTask_BeforeStart( object sender, EventArgs e)
{
Task task = sender as Task;
task.MethodName = " GetProductList " ; // 对应于数据层的方法名
task.ReturnType = typeof (List < Product > ); // 对应于数据层的返回类型
task.SetParameter( " count " , int .Parse( this .count.Text)); // 对应于数据层的方法的参数
}
public void GetProductListCallBack(Response response)
{
List < Product > product = reponse.data as List < Product > ;
// update UI.
}
// 所以你需要在数据访问层增加对应的方法:
public List < Product > GetProductList( int count)
{
// get data from xml or database
}
一、框架整体分为5块(界面、服务端、业务逻辑层、数据访问层、通用层),包含15个项目,通过配置web.config,其中的Remoting服务端可以去掉,变为界面层直接访问逻辑层.
可以参考下面此图:
二、下面是数据请求的过程
1.界面层通过Task发送Request请求,最终调用了HttpRequest请求一个httpHandle
2.httpHandle会截取到此请求,发送给remotingServer处理,
3.server会把此请求的数据直接发给业务逻辑层处理,
4.业务逻辑层会进行反序列化,提取请求中方法名和参数,通过method.invoke(DALImpl,Paras)动态执行数据层相应的方法
5.把method.invoke返回的实体装载到Response里,Response.ToJson()返回json结果
6.返回到界面层时会进行反序列化,还原Response,Response.data as entity即是数据层返回的entity
可以参考下面此图:
三、Core里面的核心3个对象: