来源: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提供非常灵活和简单的途径,在后面的文章中我们会介绍。