ClientAsTemplate用法
kbmMW提供了TkbmMWClientQuery查询组件,作为kbmMW开发者都知道,这是一个内存数据集,基于服务端的查询服务(Query Service),可以直接执行sql得取想要的记录,因为是内存表,可以直接增、删、改记录,并利用Resolve方法提交修改到服务器,同时,也支持事务,利用kbmMWClientTransactionResolve组件,在事务中一次提交多个数据集。
利用ClientQuery组件,就可以轻松将原来的两层应用,如基于ADO设计的系统,移置到kbmMW多层架构上来,方便快捷,无缝升级旧有系统,这不得不佩服kbmMW作者的功力,做出如此易用的kbmMW多层架构。
如果你还不知kbmMWClientQuery的用法,可以学习以前一的文章,在这里:kbmMW实现sql查询。在这篇文章里,没有提及到kbmMWClientQuery.Client属性,也实现了查询,那这个Client有什么作用呢?这正是本文要解释的内容。
kbmMWClientQuery.Client是TkbmMWCustomSimpleClient类型,TkbmMWSimpleClient是继承自TkbmMWCustomSimpleClient的组件,其作用是向服务端发送请求,并可取得服务端返回的结果。更具体说,就是调用服务端实现的方法,这是kbmMW框架中最基础的类。在窑洞洞主的系列文章中第一个例子就是介绍如何实现服务端方法并通过SimpleClient来调用,不清楚可以先去看看,先理解SimpleClient的作用。
当理解了SimpleClient的作用,对于kbmMWClientQuery.Client属性就不难理解,实际上kbmMWClientQuery就是通过Client属性,调用服务端查询服务的方法,以执行sql取得返回结果集。那问题来了,当我们不设置Client属性,kbmMWClientQuery又是怎么发送的查询请求呢?通过源码,就会明白,不管kbmMWClientQuery.Client属性是否为nil,都会自己在内部建立一个SimpleClient实例。当ClientQuery.Client为nil,则通过这个实例与服务端通信,执行服务端查询服务的各种内置方法。如果为kbmMWClientQuery.Client指定了一个SimpleClient,kbmMWClientQuery就会使用指定的SimpleClient与服务端通信,为什么要这样设计呢?其目的就是多个ClientQuery共享一个SimpleClient。而共享一个SimpleClient的好处就是开发者可以为SimpleClient设置好需要传递给服务端的数据,而不用每次都做重复处理,这又是哪些数据呢?比如:用户名与密码,还有就是自己特定的数据。
说了这么多,我想已经说清了kbmMWClientQuery.Client的作用,并且如何使用他。但这都是在主线程中去实现,没有问题,如果在多线程中使用ClientQuery,并且共享一个SimpleClient,那问题就来了,SimpleClient不是线程安全的,我们不能这么干,否则你的应用就不稳定了,会出现各种地址错误。很多kbmMW初级开发者会因为这个问题认为kbmMW框架不稳定。
解决这个问题,就是利用ClientAsTemplate属性,将他设置为True,通过源码,我们会看到,如果ClientAsTemplate为True,当ClientQuery获取SimpleClient时,会使用内部的SimpleClient,同时复制Client属性对应的实例内容到内部的SimpleClient。然后再用内部的SimpleClient调用服务端的方法。
上面所说的逻辑在ClientQuery.GetActiveClient实现代码中,当ClientQuery要执行服务端方法时,就是通过这个方法取得SimpleClient,然后用他去调用服务端方法。可以进一步参考ClientQuery.GetMetaData等方法,这些方法中,可以清晰的看到使用GetActiveClient方法取得SimpleClient。
ClientAsTemplate用法的更多相关文章
- EditText 基本用法
title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...
- jquery插件的用法之cookie 插件
一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...
- Java中的Socket的用法
Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...
- [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法
一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...
- python enumerate 用法
A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...
- [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...
- 【JavaScript】innerHTML、innerText和outerHTML的用法区别
用法: <div id="test"> <span style="color:red">test1</span> tes ...
- chattr用法
[root@localhost tmp]# umask 0022 一.chattr用法 1.创建空文件attrtest,然后删除,提示无法删除,因为有隐藏文件 [root@localhost tmp] ...
- 萌新笔记——vim命令“=”、“d”、“y”的用法(结合光标移动命令,一些场合会非常方便)
vim有许多命令,网上搜有一堆贴子.文章列举出各种功能的命令. 对于"="."d"."y",我在无意中发现了它们所具有的相同的一些用法,先举 ...
随机推荐
- 『MXNet』第六弹_Gluon性能提升
一.符号式编程 1.命令式编程和符号式编程 命令式: def add(a, b): return a + b def fancy_func(a, b, c, d): e = add(a, b) f = ...
- python-项目流程分析及优化查询方法
项目流程分析: ****** 1. 需求分析 2. 知识点 - 插件 3. 功能分析: - 用户登录 - session - 签名cookie PS: 主动设置超时时间:request.session ...
- HomeBrew的安装和简单使用
homebrew 官网 https://brew.sh/ 转自:http://blog.csdn.NET/maojudong/article/details/7918291 1. 前言 作为Linu ...
- GitHub学习二-将本地Git库与Github上的Git库相关联
0 git clone 如果是从自己的github clone,一键搞定,和三步的git remote add功能一样. 1.创建本地库 新建目录,右键git bash here,输入 git ini ...
- Python函数式编程,map/reduce,filter和sorted
什么是函数式编程? 与面向对象编程(Object-oriented programming)和过程式编程(Procedural programming)并列的编程范式. 最主要的特征是,函数是第一等公 ...
- Vue keep-alive总结
<keep-alive>是Vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM. <keep-alive> 包裹动态组件时,会缓存不活动的组件实例,而不是 ...
- 基于js的CURD插件
前言: 每个web程序对数据库的创建(Create).更新(Update).读取(Retrieve)和删除(Delete)操作都是必不可少的,于是我决定开发一个基于JavaScript和jQuery框 ...
- PHPCMS V9完全开发介绍
PHPCMS V9 文件目录结构: 根目录 | – api 接口文件目录 | – caches 缓存文件目录 | – configs 系统配置文件目录 | – caches_* 系统缓存目录 | – ...
- Python3各种进制之间的转换方法
一.2/8/10/16进制互转 1.1 2/8/10/16进制赋值 # 二进制赋值以0b打头 a = 0b1000 # 八进制赋值以0o打头,第一个是数字0第二个是字母o b = 0o1100 # 十 ...
- 【转】关于TCP 半连接队列和全连接队列
摘要: # 关于TCP 半连接队列和全连接队列 > 最近碰到一个client端连接异常问题,然后定位分析并查阅各种资料文章,对TCP连接队列有个深入的理解 > > 查资料过程中发现没 ...