简单而复杂的未来(一)
——.Net时代C/S、B/S、Desktop程序一统解决之道
这些天我一直在思考一个问题,C/S,B/S、Desktop应用程序有没有可能最后统一起来,用户可以不需要知道程序是什么类型,程序员可以只写一遍代码就可以在三种模式下运行。本文就是讨论这种可行性。
C/S、B/S与Desktop应用程序倒底有没有本质区别呢,应该说看上去有区别,我们来看下面这张表(对Windows而言)
| Desktop | C/S | B/S |
表现层地点 | 本机 | 本机 | 本机 |
表现层环境 | 窗口环境 | 窗口环境 | 浏览器 |
表现层逻辑 | 本机 | 本机 | 本机/服务器 |
应用层地点 | 本机 | 本机/服务器 | 服务器 |
数据层地点 | 本机 | 服务器 | 服务器 |
|
|
|
|
从上表可以看到,面对用户的表现层总是处在本机,表现层逻辑也可以统一到本机上(B/S中如果采用脚本实现而非服务器生成绘制代码,而且从AJAX的目标来看就是要模糊C/S和B/S的界线,服务器更专注于应用层和数据层)。至于表现层环境是不是统一的呢,实际上浏览器也是一个窗口应用而已,只是它通过脚本来进行绘制,和窗口绘制用二进制的字节来调用并没有本质的区别。
表现层的统一:
在几年前也许是不可能的,因为硬件的要求达不到我们的要求,也因为软件技术没有如此的丰富。现在我们有了高速的PC机,XML的技术。完全能实现我们的目标。对于以下一个XML文件
<?xml version="1.0" encoding="utf-8" ?>
<FORM WIDTH="300" HEIGHT="500" TITLE="Test Form">
<LABEL LEFT="0" TOP="0" WIDTH="100" HEIGHT="25" TITLE="Hello,World!"></LABEL>
<BUTTON LEFT="0" TOP="30" WIDTH="40" HEIGHT="30" TITLE="ClickMe" OnClick="System.MyDll.CButton.ClickMe"></BUTTON>
<PICTURE LEFT="0" TOP="100" WIDTH="100" HEIGHT="100" Pic="System.MyDll.Resource.Image001.jpg"></PICTURE>
</FORM>
当然这是一个示例。但是以上三种程序均可以对其进行解读,并且生成用户界面,B/S自然不必说,C/S和桌面程序只需一个可进行扩展的框架库便可以实现。当然它的速度会比直接用二进制的要慢一点,但是是完全可以接受的。如果同时有一个B/S的界面库,应该是可以保证三种程序界面完全统一的。只是B/S的界面是显示在浏缆器里。事实上目前有很多三方控件它是基于XML文件的。
从上面我们可以看到界面逻辑System.MyDll.Cbutton.ClickMe完全后置,这样做是有好处的,可以使我们的界面和界面逻辑完全分开,才可能实现三种程序的统一。
后面的章节我会讨论应用层与数据层实现统一的可能。
欢迎大家讨论。