智能客户端应用学习系列:SmartClient Software factory中的Composite UI Application Block(Cab)技术了解(十):异步调用,离线处理,队列管理的关系
来源:互联网 发布:淘宝网羽绒服 编辑:程序博客网 时间:2024/05/21 10:03
异步调用,离线处理,队列管理的关系
(系列从"十"后的例子我已经重新上传进行了整理,都是自己在学习的过程中做的一些例子,比较粗糙,因为原来都是一边看一边做的练习用的例子,虽然写的不好,希望能给各位朋友一些帮助吧,以后有时间会做的更好一点)
为什么把这三者都放在一起呢?因为这三者其实是以Command对象为主轴相互关联的技术问题。这里先看看图4.2.1:
图 4.2.1
整个流程是当客户向AsynchTimeOutProxy异步代理对象发出操作请求,AsynchTimeOutProxy会把请求封装为一个Command对象后加进CommandQueue队列对象中,并通过委托事件处理该Command对象,无论成功与否返回一个callback的委托信息让客户端根据返回信息进行操作成功处理还是操作失败(离线)处理。
这里看一个实例,以便能对他们三者的关系有更具体的了解。在项目AppraiserWorkbench中,Client部分对应视图为:
图 4.2.2
其中的Presenter部分相关代码为:
AvailableAppraisalsViewPresenter.cs
/// <summary>
/// Shows the available appraisals.
/// </summary>
public void ShowAvailableAppraisals()
{
OnStatusUpdate(String.Empty);
_appraisalService.GetAppraisals(AppraisalFilter.Unassigned, delegate(bool success, Appraisal[] appraisals)
{
if (success)
{
View.SetAppraisals(appraisals);
}
else
{
OnStatusUpdate(Properties.Resources.CannotGetListUnAppraisals);
_messageBoxSvc.Show(Properties.Resources.CannotGetListUnAppraisals);
View.CloseView();
}
});
}
其中的红色部分为调用代理的代码。这里的AsynchTimeOutProxy对象部分的功能在该实例中主要由AppraisalManagementServiceAgent和AppraisalManagementServiceProxy两个类协同处理AppraisalManagementServiceAgent负责调用相关的Command对象并发送给AppraisalManagementServiceProxy来进行处理:
public void GetAppraisals(AppraisalFilter filter, GetAppraisalsCallback callback)
{
Guard.ArgumentNotNull(callback, "callback");
if (filter == AppraisalFilter.MyAppraisals)
{
callback(true, GetLocalAppraisals());
return;
}
_appraisalServiceProxy.GetAppraisals
(
GET_APPRAISALS_TIMEOUT, UserId, ClientFilterToSvcFilter(filter),
delegate(bool success, GlobalBank.AppraiserWorkbench.WebServiceProxies.AppraisalService.Appraisal[] appraisals)
{
OnGetAppraisalsComplete(success, appraisals, filter, callback);
}
);
}
private void OnGetAppraisalsComplete(bool success, GlobalBank.AppraiserWorkbench.WebServiceProxies.AppraisalService.Appraisal[] appraisals, AppraisalFilter filter, GetAppraisalsCallback callback)
{
Appraisal[] result = null;
if (success)
{
List<Appraisal> appraisalsResult = new List<Appraisal>();
foreach (GlobalBank.AppraiserWorkbench.WebServiceProxies.AppraisalService.Appraisal wsAppraisal in appraisals)
{
if (Contains(wsAppraisal.Id))
appraisalsResult.Add(Load(wsAppraisal.Id));
else
{
Appraisal appraisal = SvcAppraisalToClientAppraisal(wsAppraisal);
appraisalsResult.Add(appraisal);
if (filter == AppraisalFilter.MyAppraisals)
Save(appraisal);
}
}
result = appraisalsResult.ToArray();
}
OnServiceOperationNotification(success);
callback(success, result);
}
而AppraisalManagementServiceProxy负责把Command对象放到队列中并实现Command的对象请求。
public void GetAppraisals(int timeout, string userId, AppraisalFilter filter, Commands.GetAppraisalsCommand.CallbackType callback)
{
Queue.Add(new WebServiceProxies.AppraisalService.Commands.GetAppraisalsCommand(Service, timeout, userId, filter, callback));
}
红色部分就是CommandQueue对象实例。
后记:其实这篇文章例子说的不好,一直放在草稿箱中.想等以后修改.不想一放就放了快两年了,现在也不修改了,直接发出来了,有问题的地方大家就见谅了,至于新的例子倒很多,只是后来想整理.一忙起来就忘了.等以后找到再放上来吧.其实它本身提供的例子已经很好了.
- 智能客户端应用学习系列:SmartClient Software factory中的Composite UI Application Block(Cab)技术了解(十):异步调用,离线处理,队列管理的关系
- 智能客户端应用学习系列:SmartClient Software factory中的Composite UI Application Block(Cab)技术了解(九):Custom WorkSpace
- SmartClient Software factory中的Composite UI Application Block(Cab)技术了解(一):Shell&amp;Layout
- SmartClient Software factory中的Composite UI Application Block(Cab)技术了解(二):WorkItem&SmartPart
- SmartClient Software factory中的Composite UI Application Block(Cab)技术了解(三):UIElement
- SmartClient Software factory中的Composite UI Application Block(Cab)技术了解(四):Command
- SmartClient Software factory中的Composite UI Application Block(Cab)技术了解(五):Event Broker
- SmartClient Software factory中的Composite UI Application Block(Cab)技术了解(六):SmartPartInfo
- SmartClient Software factory中的Composite UI Application Block(Cab)技术了解(七):State
- SmartClient Software factory中的Composite UI Application Block(Cab)技术了解(八):Service
- CAB(Composite UI Application Block)学习记录
- 了解Composite UI Application Block的基本应用
- Composite UI Application Block(Cab)实例学习资料收集
- Composite UI Application Block(Cab)比较详细的一片文章
- Composite UI Application Block(Cab)资料收集
- Composite UI Application Block (2) ------ Design of CAB
- Composite UI Application Block (CAB) 概念和术语
- Composite UI Application Block
- 使用ComponentArt Grid中的客户端模板
- 什么样的男人才算真正健康?
- ComponentArt.web.ui中文帮助之Grid(五)
- 河南省公务员的津贴补贴标准
- Struts 问题小结
- 智能客户端应用学习系列:SmartClient Software factory中的Composite UI Application Block(Cab)技术了解(十):异步调用,离线处理,队列管理的关系
- JavaScript 技巧与高级特性
- ComponentArt.web.ui中文帮助之Grid(六)
- m65上网设置
- 支付宝不关心盈利因为本身便是聚宝盆
- JavaScript的原生类型以及Microsoft AJAX Library的相关扩展(1)
- 地盘网(www.the-zone.cn)上线试运行
- servlet(5)
- C++ sizeof 使用规则及陷阱分析(转)