SCSF智能客户端学习笔记(一)

摘要:
什么是智能客户端要了解智能客户端,首先,我们应该了解瘦客户端技术和胖客户端技术的优缺点。胖客户端可能需要在客户端上实现数据库支持。将数据库放置在本地可能会导致一些安全问题,因为与更注重安全性的服务器相比,客户端相对容易受到攻击。SCSF为开发CAB程序提供了一些架构指导。SCSF为开发人员提供了一些工具集。它管理CAB的启动过程并托管用户界面元素。SmartPart通常归WorkItems所有。

什么是智能客户端

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

       对于前者,典型的应用就是使用浏览器,通过输入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基本概念

应用程序架构元素

CABComposite UI Application Block的缩写

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

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

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

VisualizerCAB中提供的,可以查看应用程序中的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个不同的组成部分。视图部分提供给用户进行交互,交互信息通过视图传到控制器,控制器更新模型,模型引发事件,从而更新视图。关系图如下:

SCSF智能客户端学习笔记(一)第1张

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

SCSF智能客户端学习笔记(一)第2张

相关编程模型

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智能客户端学习笔记(一)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇有关Canvas的一点小事—canvas数据和像素点HTTP metadata数据下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

开启9008端口进入深刷模式

除了前文所述,使用深刷线,还可以用命令开启9008端口,进入深刷模式。 adb reboot edl fastboot oem edl 这个在小米4c上测试ok 下面这个可能用于其他手机。 fastboot reboot emergency  ==================================== http://www.znsjw.net...

信息系统设计

4、信息系统设计 4.1系统设计概述 系统分析阶段要回答的中心问题是系统“做什么”,即要明确系统的功能和用途,为系统的具体设计和实现提供一个逻辑模型。 系统设计阶段要回答的中心问题是系统“怎么做”,即如何实现系统规格说明书所规定的系统功能。建立物理模型。 4.1.1系统设计的目标 1、系统的可靠性 系统的可靠性主要分系统硬件和软件的可靠性。衡量系统的可靠性...

基于Unity的AR开发初探:发布AR应用到Android平台

本文接上一篇,介绍一下如何通过Unity发布第一个AR应用至Android平台,在Android手机上使用我们的第一个AR应用。 一、一些准备工作 1.1 准备Java JDK 这里选择的是JDK 1.8.x版本,可以从这里下载。 1.2 准备Android SDK 这里选择的是R24.1.x-Windows版本,可以从这里下载。 Note:为了减少配置的...

黑盒测试中的一些小经验

1、  UI测试:   a、  非必填项不填写界面显示;   b、  文字输入最大值界面显示需正常;   c、  非必填项和必填项都输入界面,主要看字体大小排版这些   d、  界面UI显示(对照设计稿)   e、  图片显示(等比截取和压缩需与产品确认)       f、不能输入纯空格   g、文字信息太多时需换行显示 2、  网络测试:   a、  关...

【原生】CocosCreator apk打包发布 (APPABI、jsc、网易易盾、权限、app名称图标、包名、签名)

Cocos版本:2.4.4  一 打包apk 二 App ABi的勾选 三 加密脚本 四 网易易盾插件 五 其它问题 一 打包apk 在android studio中,选择生成带签名的apk  选择APK 选择Module处,选择你的项目。 然后如果已有签名jks文件则选择choose existing,并输入你的key store密码。  没有jks...

Autojs

我是风筝,公众号「古时的风筝」,一个不只有技术的技术公众号,一个在程序圈混迹多年,主业 Java,另外 Python、React 也玩儿的 6 的斜杠开发者。 Spring Cloud 系列文章已经完成,可以到 我的github 上查看系列完整内容。也可以在公众号内回复「pdf」获取我精心制作的 pdf 版完整教程。 一个神奇的 APP 这个软件叫做 Au...