什么是智能客户端

  要了解智能客户端,首先要认识瘦客户端技术和胖客户端技术各自的优缺点。

对于前者,典型的应用就是使用浏览器,通过输入URL远程访问服务端,并向服务端发送命令,获取服务端的资源,然后在客户端的浏览器上显示出来。由于这种技术数据库存放在服务端,客户端应用界面的也是由服务端的文件生成,因此在客户端上占用资源少,对客户端的设备要求不高,只需一个浏览器软件和可用的网络便能开始工作,另外,如果系统需要升级修改,只需要在服务端更新文件,当客户再次访问时,就可以使用新的应用系统了,因而部署和升级重点都放在了服务端,实现起来比较简单。但是,这种B/S模式依赖网络,当网络不可用时或出现性能不稳定的情况时就会导致客户端变成“死界面”——既不能将数据发送回服务端进行保存,又不能从服务端获取数据拿到客户端操作,一切的工作将要在网络恢复后才能得以继续。

对于胖客户端技术,用户在使用这种软件时获得的最大的感官体验就是——它首先有自己独特的应用程序界面,而非通过浏览器,用户甚至还可以根据自己的喜好调整软件的布局,进行丰富的界面元素的设置,这些都是B/S模式的瘦客户端技术所不能媲美的。另外,用户还能获得较快的反应速度,程序可以充分利用本地机器的资源,在不使用网络访问远程资源时,本地资源的访问在正常情况下都能得到很快的处理。同样的,胖客户端技术也有着不尽人意的地方——在客户端进行部署时,由于客户端可能出现各种各样的情况,所以需要进行必要的设置,部署起来比较困难,如果对软件的版本进行升级,使用传统的DLL技术的那将更是一个大的挑战,因为在.NET之前,标准Windows DLL或COM组件可能出现“DLL Hell”——注册和更新软件中的DLL时,发现共享的DLL被最新版本改写了,并使该机器上的其他软件也因此不能运行。胖客户端有可能需要在客户端实现数据库支持,数据库放在本地有可能导致一些安全问题,因为相对于更重视安全的服务端,客户端相对而言还是比较脆弱的。

那么智能客户端技术便出现了,除了包括了胖/瘦客户端各自的优点外,它还具有如下四个最大的优点——

1) 充分利用终端设备的优势(full PC, PDA, phone都可以满足),因为核心部分在服务端(可能Web Service),所以终端只需实现表示层和一些简单逻辑;

2) 能够调用web services,在server端用web服务实现业务逻辑,处理各种请求,需要说明的是,由于业务逻辑实现放在客户端,因此一方面为客户端瘦身,另一方面也加强了软件的隐蔽性和安全性

3) 支持在线和离线两种状态,用户可以在网络不可用时继续工作,并将数据临时存放在本地,当网络再次可用,数据便可传上服务器

4) 能够如同Web应用程序一般简单方便的部署,.NET使用程序集技术,同一软件的不同版本可以共存于统一客户端。版本的升级也非常简单,软件访问服务端,能自动检测版本号,从而更新关键组件,实现升级。

SCSF与CAB的关系

tag:这里引用前辈们的一些见解http://blog.csdn.net/dawn023/article/details/3392256

CAB是一个为实现SCSF的框架,SCSF提供一些开发模版以及一些有用的Service,以方便程序员的开发。SCSF提供一些开发CAB程序的架构指导。SCSF提供一些工具集供开发人员使用。

SCSF与CAB基本概念

应用程序架构元素

CAB. Composite UI Application Block的缩写

Module. 应用程序的组成部件,其中包含SmartParts,支持Service,业务逻辑和配置信息等。一个.NET程序集合,为WorkItems, Service, 和其他支持类提供的一个物理容器。

ObjectBuilder.通过策略和配置信息自动创建对象实例的对象构造器。

Shell. 承载了用户接口元素,SmartPart,服务的外壳宿主程序。

Visualizer. CAB中提供的,可以查看应用程序中的WorkItem的动态分级视图的工具。

外壳元素

shell application. 主WinForm应用程序,CAB程序的各个部分的外部容器。它管理CAB的启动过程,承载了用户接口元素。

Shell Form Shell Application的主窗口。一般来说就是通常所说的Shell。它通常包含Workspaces和用户界面元素,如菜单和工具条。

SmartPart. 一个展现数据的视图,比如控件,Windows 窗体或是一个向导页。WorkItem所拥有的数据的可是展示或视图。它为WorkItem所拥有并显示在Workspace中。SmartPart一般就是WinForm控件的实现,一般包含其他的WinForm控件。除显示数据之外,也允许用户修改数据。

SmartPartInfo. 存放SmartPart的相关信息的类,以便被workspace所使用,比如可以在Smartpartinfo中设置SmartPart的显示标题。

UIElement. 一个以Shell作为宿主的控件,该控件能被多个Module所共享,这样的控件有:toolbar button , menuitem , status panel等

UIElement adapter. 管理特殊类型的UIElement的显示的类

Workspace. 封装了控件和SmartParts的某种可视化的布局的组件的容器窗口,比如以Tab方式显示页面。SmartPart一般是由WorkItem拥有的。Workspace可以控制SmartPart是显示还是隐藏。CAB提供了一些标准的Workspace类,当然也可以自定义

事件注册机制

(1)、Event Broker:事件代理,通过事件源和订阅事件源来达成对象之间的协作。
(2)、Event Publisher: 事件发布者,在CAB里是一个用属性EventPublication修饰的事件对象,提供特定的URL给Event Subscriber订阅。
(3)、Event Subscriber: 事件订阅者,在CAB里是一个用属性EventSubscription修饰的方法,根据修饰提供的URL自动寻找事件发布者。Publisher和 Subscriber之间由主题(由URL决定),消息(特定的 EventArgs),事件域(来确定是全局事件还是局部事件)来达成一致。其实这也是观察者模式的具体实现。

相关模式

Blackboard. 通过提供一个共享信息的地方,使其他组件能设置或获取这个地方的信息,已达到信息共享的模式。

Builder/Inversion of Control/Dependency Injection. 该模式通过组件之间的依赖关系进行运行时的注入,来达到组件重用和松散耦合的目的。

Event Broker. 允许松散耦合的组件通过发布订阅的方式进行通讯的模式。

Memento.持久化一个对象的内部状态状态,并在需要的时候可以在后期对状态进行恢复的模式。

Model-View-Controller (MVC). 该模式将领域模型,视图和基于用户输入产生的行为(控制器)分成3个不同的组成部分。视图部分提供给用户进行交互,交互信息通过视图传到控制器,控制器更新模型,模型引发事件,从而更新视图。关系图如下:

Model-View-Presenter (MVP). 该模式将领域模型,视图和基于用户输入产生的行为(控制器)分成3个不同的组成部分。视图部分提供给用户进行交互,交互信息通过视图传到控制器,控制器更新模型,模式触发事件到控制器,同时,控制器负责更新视图。关系图如下:

相关编程模型

Component. 应用程序的可视或非可视组成部件,比如SmartParts, services, 和控件.

Container. 包含了组件或服务的类。

event broker. 支持松散耦合的发布订阅事件机制的系统。

State. 存在于WorkItem中,以键-值的字典的方式来存放共享信息。

Service.以松散耦合的方式为其他的组件提供功能的组件(通常包含一些与其他WorkItem独立的工具方法。)。比如:ModuleLoaderService

WorkItem. 运行时的组件(对象)和服务的容器,该容器能协作其中封装的用例代码的执行。一般WorkItem和用例对应。一般作为CAB应用程序的组成部分存在。可以把它作为逻辑上的子程序或子进程。它是CAB程序的基本单元。用户所写的业务逻辑一般都在一个或多个WorkItem中。

相关角色

infrastructure developer. 负责进行应用程序的基础服务的开发的开发人员。

module developer. 负责进行应用程序的业务组件的开发的开发人员。

shell developer. 负责建立应用程序外壳的开发人员。

SmartPart developer. 负责开发应用程序的SmartParts的开发人员。

SCSF启动流程

详细启动流程释:http://www.cnblogs.com/flyabroad/archive/2008/06/16/1222948.html

//new ShellApplication().Run()的方法内部
public void Run(){
RegisterUnhandledExceptionHandler();
Builder builder = CreateBuilder();//首先创建Builder
AddBuilderStrategies(builder);//子类可以通过重写 AddBuilderStrategies方法来给ObjectBuilder添加其他构件策略(在构件对象或者销毁对象时执行)
CreateRootWorkItem(builder); //初始化RootWorkItem
IVisualizer visualizer = CreateVisualizer();//创建"观察者"
if (visualizer != null)//可选操作(用于在运行时查看workitem的状态)
visualizer.Initialize(rootWorkItem, builder); AddRequiredServices();//添加服务
AddConfiguredServices();//添加在配置文件中配置的服务,也就是 运行我们通过配置的方式决定在 SCSF 框架启动时加载额外服务(Services)。
AddServices();
AuthenticateUser();//验证用户
ProcessShellAssembly();//处理Shell程序集
rootWorkItem.BuildUp();//构建RootWorkItem
LoadModules();//通过配置加载模块
rootWorkItem.FinishInitialization(); //完成对 RootWorkItem 的创建,并触发创建完成事件
rootWorkItem.Run();// 执行 rootWorkItem 的 run 方法,该直接调用 protected virtual void OnRunStarted() 方法,OnRunStarted方法会触发 RunStarted 事件
Start(); // 启动应用(程序)
}

SCSF智能客户端学习笔记(一)的更多相关文章

  1. Leaflet客户端学习笔记

    Leaflet介绍 Leaflet 是一个为建设交互性好适用于移动设备地图,而开发的现代的.开源的 JavaScript 库.代码仅有 33 KB,但它具有开发在线地图的大部分功能.支持插件扩展, L ...

  2. C++的智能指针学习笔记(初)

    C++ primer plus 16.2节介绍了auto_ptr,该模板类在C++11中已弃用,目前已被shared_ptr代替. auto_ptr又叫做智能指针,用于管理动态内存分配的用法. 为什么 ...

  3. Dynamic CRM 2013学习笔记(十)客户端几种查询数据方式比较

    我们经常要在客户端进行数据查询,下面分别比较常用的几种查询方式:XMLHttpRequest, SDK.JQuery, SDK.Rest. XMLHttpRequest是最基本的调用方式,JQuery ...

  4. Dynamic CRM 2013学习笔记(二十三)CRM JS智能提示(CRM 相关的方法、属性以及页面字段),及发布前调试

    我们知道在CRM的js文件里引用XrmPageTemplate.js后,就可以实现智能提示,但每个js文件都引用太麻烦了,其实可以利用vs的功能让每个js文件自动实现智能提示CRM的js: 另外,我们 ...

  5. [Firefly引擎][学习笔记四][已完结]服务器端与客户端的通讯

    原地址:http://www.9miao.com/question-15-54981.html 传送门:学习笔记一学习笔记二学习笔记三 前言:学习笔记三是模块封装,这个在持续开发中会不断更新, 因为写 ...

  6. Android(java)学习笔记206:利用开源SmartImageView优化网易新闻RSS客户端

    1.我们自己编写的SmartImageView会有很多漏洞,但是我们幸运的可以在网上利用开源项目的,开源项目中有很多成熟的代码,比如SmartImageView都编写的很成熟的 国内我们经常用到htt ...

  7. Android(java)学习笔记205:网易新闻RSS客户端应用编写逻辑过程

    1.我们的项目需求是编写一个新闻RSS浏览器,RSS(Really Simple Syndication)是一种描述和同步网站内容的格式,是使用最广泛的XML应用.RSS目前广泛用于网上新闻频道,bl ...

  8. 多线程编程学习笔记——编写一个异步的HTTP服务器和客户端

    接上文 多线程编程学习笔记——使用异步IO 二.   编写一个异步的HTTP服务器和客户端 本节展示了如何编写一个简单的异步HTTP服务器. 1.程序代码如下. using System; using ...

  9. Netty学习笔记(六) 简单的聊天室功能之WebSocket客户端开发实例

    在之前的Netty相关学习笔记中,学习了如何去实现聊天室的服务段,这里我们来实现聊天室的客户端,聊天室的客户端使用的是Html5和WebSocket实现,下面我们继续学习. 创建客户端 接着第五个笔记 ...

随机推荐

  1. MySQL初夜(乱码问题,命令行客户端使用)

    一.乱码问题 装好MySQL,并且将数据从SQLServer导入到MySQL之后,程序一直报错. 解决方案: 首先,输入命令: show variables like "character_ ...

  2. CSS 属性设置优先级问题

    1.多个选择器可能会选择同一个元素,有3个规则,从上到下重要性降低: !important的用户样式 !important的作者样式 作者样式 用户样式 浏览器定义的样式 2. CSS规范为不同类型的 ...

  3. Linux:系统的密码忘记了,登录不上

    可先通过进入单用户模式,修改下密码再登录记录. 第一步: 重启系统,在进入系统之前不断的按键盘左上角的“Esc”键,会进入如下页面: 然后按e进入编辑页面 第二步: 进入如下页面后,通过键盘的上下方向 ...

  4. 【UEditor】远程上传图片到【七牛云存储】

    杂谈:最近在玩一个第三方的微信开发平台,里面的图片都是上传到[七牛云存储]的,用了一下非常的好用,支持各种语言,SDK齐全.支持全分布式系统架构以及存储技术和数据加速,于是决定将网站的图片都存储到七牛 ...

  5. 在Qt中使用AnyCAD三维建模控件

    AnyCAD C++ SDK专为Qt框架增加了AnyPlatformQt.lib模块,在Qt中使用AnyCAD三维建模控件变得十分简单. 下载 Qt高速下载:http://pan.baidu.com/ ...

  6. POJ C++程序设计 编程题#1 大整数的加减乘除

    编程题#4:大整数的加减乘除 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 ...

  7. Linux基础知识-文件管理

    Linux目录与路径 cd:切换目录 例如:cd ~willhua,则回到用户willhua的主文件夹  cd ~或者cd,则表示回到自己的的主文件夹  cd -,则表示回到上个目录 pwd:显示目前 ...

  8. 三、MongoDB的创建、更新和删除

    一.MongoDB的下载.安装与部署 二.MongoDB的基础知识简介 三.MongoDB的创建.更新和删除 概要 下面开始学习MongoDB最重要也是最基础的部分:C(创建)R(查询)U(更新)D( ...

  9. 360提供的SQL防注入

    <?php class sqlsafe { private $getfilter = "'|(and|or)\\b.+?(>|<|=|in|like)|\\/\\*.+?\ ...

  10. windows服务器记录3389远程桌面IP策略

    以下代码复制存成一个批处理文件后双击即可! 3389IP日志路径是C:\WINDOWS\PDPLOG\RDPlog.txt  代码: MD C:\WINDOWS\PDPLOG  " /f  ...