Flier's Sky

天空,蓝色的天空,眼睛看不到的东西,眼睛看得到的东西

导航

B/S, C/S or Smart Client

Posted on 2004-07-08 10:52  Flier Lu  阅读(1305)  评论(0编辑  收藏  举报
http://www.blogcn.com/user8/flier_lu/index.html?id=1567274&run=.08E8850

我们在开发程序的时候,往往会在B/S和C/S模式之间摇摆不定,因为这两种模式在特性上各有千秋,常常想如果能够结合两者的优点就好了,呵呵。Smart Client正是结合两种模式的一种尝试,它构建于Web Service提供的功能之上,同时具有B/S模式通过网络服务器集中发布的优点,和C/S模式可以离线工作的优点,并可以按照不同的终端设备进行裁减。M$的.NET产品架构按Don Box的说法可以分为两部分:CLR和Web Service,而MS提出的Smart Client概念正是链接这两者的桥梁。
     下面这两篇文章从整体架构上介绍了Smart Client的概念:

     Smart Clients: Combining the Power of the PC with the Reach of the Web
     Smart Client Application Model and the .NET Framework 1.1

     就发布方式来说,Smart Client可以通过网络服务器发布:以 ::URL::http://RemoteWebServer/myExe.exe  形式提供直接下载运行;或者通过程序在后台调用System.Reflection.Assembly.LoadFrom自动加载。
     例如下面代码从服务器上直接载入一个模块并使用之:
 

以下为引用:

 Assembly downloadedAssembly;
 Type formType;
 Form downloadedForm;

 try
 {
   //download and load the assembly
   downloadedAssembly = Assembly.LoadFrom("::URL::http://RemoteWebServer/CSharpForm2.dll");

   // find the type in the assembly for the object we want to create
   formType = downloadedAssembly.GetType("CSharpForm2.Form2");

   //Create an instance of the desired type and show it
   downloadedForm = (Form) System.Activator.CreateInstance(formType);

   if (downloadedForm != null)
   {
     downloadedForm.Show();
   }
 }
 catch (Exception exc)
 {
   MessageBox.Show(exc.ToString());
 }
 



     而因为.NET架构的支持,这种发布方式无需担心“Dll Hell”问题,真正做到XCOPY的分发策略。

     与传统的B/S模式程序相比:Smart Client程序可以离线运行,随时随地进行工作;并可以完全利用本地机器上的强大能力,如调用本地API,使用打印机等等。与传统的C/S模式程序相比:Smart Client程序可以使用透明的Web Service调用服务器端功能,穿透防火墙,同时无需象C/S程序那样通过CD/DVD介质分发,真正做到移动代码的概念,呵呵。
     下面这篇讨论中,MS里主管Smart Client的几位老兄回答了使用者关于 Smart Client 的一些问题:

     Smart Client Development Platform

     同时MS还在开发新的客户端软件发布技术ClickOnce,让Smart Client的发布更方便、安全。

     Introducing Client Application Deployment with "ClickOnce"

     Smart Client虽新,但其使用的概念和技术并不新,呵呵。这正是微软为人诟病的一贯风格,等概念和技术发展到一定程度,然后加以整合,出一系列技术和产品,将还没站稳的先行者一网打尽 :P
     比如离线工作的概念,Borland早在几年前的 Delphi 4 就加入了TClientDataSet支持数据的离线操作,并逐渐增加自动同步和XML支持等功能;再比如ClickOnce的概念,怎么看也象 Sun 为Java客户端程序分发推出的 Web Start的概念,只是更为人性化。

     而就通用软件整体计算架构的发展来说,我认为可以根据其计算重心的转移,分为几个时期:

     Long long ago, 在传说中的Mainframe时代,计算重心稳固在计算能力高度集中的服务器端,客户端只是完成最简单的控制操作;
     然后是PC机的黄金时代,逐渐强化的台式机使得计算重心开始转移到本地机器上,摆脱主机的桎梏,单机软件迅猛发展;
     但PC机的发展速度无法完全满足IT应用的需求,因此C/S模式开始大行其道。通过文件服务器或数据库服务器的大规模应用,计算重心又一次向服务器端偏移,但客户机上仍占用相当的比重,可以说计算重心跨越两者;
     而随着Internet的飞速发展,以及终端数量的迅猛增长,C/S模式暴露出其固有的弱点,网络穿透性差以及发布和维护复杂等。瘦客户端程序和B/S模式逐渐抬头,计算重心又一次向服务器端回归;
     而今随着跨平台跨网络跨应用的需求增加,以Web Service为基础的分布式计算思想,以及网格思想的发展,使得“网络就是计算机”的概念逐渐实际化。计算重心逐渐分布在整个网络之上,用户使用时无需知道服务实际上是由谁提供的。

     而Smart Client概念的诞生,可以说正是整体计算架构发展到一定阶段后应运而生的,将会作为B/S和C/S模式的有力补充,并将随着 Web Service 的发展,以及客户端设备广泛化的趋势,逐渐侵蚀部分B/S和C/S的势力范围。 :P