CSLA.NET快速入门系列——DataPortal实现模式(转)
2013-02-28 14:05
549 查看
来源:http://www.itlead.com.cn/article/html/265/2012-11-05/content-9028.shtml
DataPortal是CLSA的一个核心概念,它从逻辑上将代码分为两个部分的代码:一部分为客户端代码(以下简称前端),一部分为服务端代码(以下简称后端),前端代码一般执行一些数据预处理,验证及提供数据实体等,后端代码一般执行数据存取。
即然前端后端是在逻辑上划分的,所以DataPortal可以很方便的通过配置实现前端和后端的物理部署,即既可以前后端部署在一起,也可以前后端部署在不同的地方。
不管实际部署如何,DataPortal中在前端和后端传递的对象应该是移动对象(MobileObject,实现了IMobileObject接口),象我们常见的业务对象和命令对象等都是移动对象。
DataPortal的实际运作有点复杂,为了更直观的理解DataPortal是如何运作的,我们通过业务对象更新(非FactoryObject模式)的时序图来说明:
图中的BusinessObject为业务对象,业务对象分别在第二栏和最后一栏,表示第二栏执行的是前端代码,最后一栏执行的是后端代码。
分步骤说明如下:
1. 当UI中需要提交一个业务对象到数据源时,调用业务对象的Save方法
2. 业务对象调用Csla.DataPortal的Update方法
3. Csla.DataPortal根据配置取得相应的Csla.DataPortalClient.IDataPortalProxy(DataPortal代理),并调用其Update方法。
4. DataPortal代理将业务对象“移动”到Csla.Server.DataPortal,并调用其Update方法。(此步骤中的“移动”即为由前端转到后端,不同的DataPortal代理的移动方式不同)。
5. Csla.Server.DataPortal根据配置取得相应的Csla.Server.IDataPortalServer(DataPortalServer),并调用其Update方法
6. DataPortalServer根据业务对象的状态确定调用业务对象相应的DataPortal方法(DataPortal_XYZ),产接收更新后的BusinessObject。
7. DataPortalServer将新BusinessObject返回给Csla.Server.DataPortal。
8. Csla.Server.DataPortal将新业务对象“移动”到DataPortal代理。(此步骤中的“移动”即为由后端转到前端,不同的DataPortal代理的移动方式不同)。
9. DataPortal代理将新BusinessObject返回给Csla.DataPortal。
10.Csla.DataPortal将新BusinessObject返回给原BusinessObject。
11.原BusinessObject将新BusinessObject返回给UI(调用方)
其中步骤4,8涉及到前后端转移(其实就是对象序列化传送,由于CSLA框架已经提供一系列的基类,我们无需知道和关心其中的复杂性),不同的DataPortal代理有不同的实现方式。同时,Csla框架中的基于抽象(接口)编程,为我们实现自己扩展的DataPortal提供非常灵活和简单的途径,在后面的文章中我们会介绍。
DataPortal是CLSA的一个核心概念,它从逻辑上将代码分为两个部分的代码:一部分为客户端代码(以下简称前端),一部分为服务端代码(以下简称后端),前端代码一般执行一些数据预处理,验证及提供数据实体等,后端代码一般执行数据存取。
即然前端后端是在逻辑上划分的,所以DataPortal可以很方便的通过配置实现前端和后端的物理部署,即既可以前后端部署在一起,也可以前后端部署在不同的地方。
不管实际部署如何,DataPortal中在前端和后端传递的对象应该是移动对象(MobileObject,实现了IMobileObject接口),象我们常见的业务对象和命令对象等都是移动对象。
DataPortal的实际运作有点复杂,为了更直观的理解DataPortal是如何运作的,我们通过业务对象更新(非FactoryObject模式)的时序图来说明:
图中的BusinessObject为业务对象,业务对象分别在第二栏和最后一栏,表示第二栏执行的是前端代码,最后一栏执行的是后端代码。
分步骤说明如下:
1. 当UI中需要提交一个业务对象到数据源时,调用业务对象的Save方法
2. 业务对象调用Csla.DataPortal的Update方法
3. Csla.DataPortal根据配置取得相应的Csla.DataPortalClient.IDataPortalProxy(DataPortal代理),并调用其Update方法。
4. DataPortal代理将业务对象“移动”到Csla.Server.DataPortal,并调用其Update方法。(此步骤中的“移动”即为由前端转到后端,不同的DataPortal代理的移动方式不同)。
5. Csla.Server.DataPortal根据配置取得相应的Csla.Server.IDataPortalServer(DataPortalServer),并调用其Update方法
6. DataPortalServer根据业务对象的状态确定调用业务对象相应的DataPortal方法(DataPortal_XYZ),产接收更新后的BusinessObject。
7. DataPortalServer将新BusinessObject返回给Csla.Server.DataPortal。
8. Csla.Server.DataPortal将新业务对象“移动”到DataPortal代理。(此步骤中的“移动”即为由后端转到前端,不同的DataPortal代理的移动方式不同)。
9. DataPortal代理将新BusinessObject返回给Csla.DataPortal。
10.Csla.DataPortal将新BusinessObject返回给原BusinessObject。
11.原BusinessObject将新BusinessObject返回给UI(调用方)
其中步骤4,8涉及到前后端转移(其实就是对象序列化传送,由于CSLA框架已经提供一系列的基类,我们无需知道和关心其中的复杂性),不同的DataPortal代理有不同的实现方式。同时,Csla框架中的基于抽象(接口)编程,为我们实现自己扩展的DataPortal提供非常灵活和简单的途径,在后面的文章中我们会介绍。
相关文章推荐
- CSLA.NET快速入门系列——DataPortal实现模式
- CSLA.NET快速入门系列——实现DataPortal扩展(三)
- CSLA.NET快速入门系列——实现DataPortal扩展(一)
- CSLA.NET快速入门系列——实现DataPortal扩展(二)
- CSLA.NET快速入门系列——实现子对象在WcfPorxy模式下的懒加载(LazyLoad)
- ActiveMQ 快速入门教程系列 第二章 发布-订阅者模式实现
- CSLA.NET快速入门系列——命令对象(CommandObject)
- [新手入门]快速学习 ADO.NET Entity Framework系列文章 #4 -- 数据新增、删除、修改(ObkectContext的 .SaveChange()方法)
- [Asp.net 开发系列之SignalR篇]专题一:Asp.net SignalR快速入门
- [推荐]ASP.NET 2.0 快速入门系列课程(附代码示例)[WMV]
- ActiveMQ 快速入门教程系列 第一章 点对点消息实现
- [Silverlight入门系列]使用MVVM模式(3):Model的INotifyPropertyChanged接口实现
- [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:为ASP.NET MVC应用程序实现继承
- Quartz.NET学习系列(一)--- 快速入门
- [Silverlight入门系列]Prism中TreeView真正实现MVVM模式和Expanded发生时异步动态加载子节点(WCFRiaService)
- 【ASP.NET Core快速入门】(十)Cookie-based认证实现
- [Silverlight入门系列]使用MVVM模式(4):Prism的NotificationObject自动实现INotifyPropertyChanged接口
- ASP.NET 快速入门系列系列--ASP.NET2.0绑定到数据库
- go语言快速入门:简单工厂模式的实现(23)
- 微信和支付宝支付模式详解及实现(.Net标准库)- OSS开源系列