走进PIMShell(1)--为什么是这样

PIMShell是一个个人信息助理软件,却为什么要做成一个插件的形式?PIMShell的界面都是网页的形式,却又不需要网页服务器,这是如何实现的?PIMShell为什么不用流行的javascript ajax库,却自己开发二进制的ajax库?PIMShell如何简化了IE插件的开发?下面就试着回答上面的问题。

 

一、功能的界定

在工作、生活、学习中,把电脑作为主要工具的人士,经常会处理各种类型的数据。对于与工作相关的数据,可能有相应的专业软件来处理。然而,还有大量的零散的私人数据却没有统一的软件来处理。比如,经常浏览的网址放入收藏夹。发现有好的文章,要么拷贝到word或记事本保存,或直接保存整个网页。经常关注的RSS订阅或者由网上的订阅器管理,或者由本地的订阅器管理,在IE7以后的版本中,直接由浏览器管理。由于没有统一的软件管理,这些数据散放在各处,备份、管理、检索、整合、与他人共享,都不是很方便。比如,重装操作系统之前,总是要检查桌面、我的文档、收藏夹还有其他位置是否有需要导出或备份的数据。一次两次还可以,可是多次之后,备份的数据就会更乱,更没有时间去整理,以至于遗忘,但删除又于心不忍。我曾经使用windows live writer来发表博客文章。辛辛苦苦写了两篇文章,点击发表,发现网络有问题,就延后再提交。之后由于其他原因需要重装系统,我依次检查了桌面、我的文档、收藏夹,可是忘了检查AppData目录。于是重装之后我的博客草稿就丢失了。试问,有多少人会去检查AppData目录还有没有重要的数据呢?可事实就是如此,有多少个管理信息的软件,就有多少个保存资料的地方。所以,如果有一个统一的软件,整合各种类型的数据,并且可以不断扩充,那么我们的数据就不再是丢三落四。

我一直认为,绝大多数的数据都有相似的处理流程。我曾经尝试着做邮件收发软件,做联系人管理软件。市面上有这么多的同类软件了,为什么还要做呢?因为有几个闪光的想法,刺动着我编程的神经,都想立刻实现出来。可当我开始做的时候,却发现,真正的功能还没法开始。我需要搭建一个界面,建立一个目录--条目的数据结构,熟悉treeview和listview如何使用。整个软件下来,闪光的功能代码不及所有代码的百分之一。如果一个软件要拿的出手,还需要增加检索、展示、共享的功能。是不是有许多同仁也有过上面的经历呢?所以,绝大多数的数据都有相似的处理流程。如果我们有这样一个框架,它解决了数据从创建(收集)-〉整理-〉检索-〉展示-〉共享的所有问题,那么当我们有闪光的创新设计时,就能快速有针对性地来实现了。

于是,这个信息管理软件的核心功能如下:

  1. 所有数据都集中保存在一个数据文件中
  2. 提供一个完整的数据处理框架,抽象数据的处理流程:创建(收集)-〉整理-〉检索-〉展示-〉共享
  3. 一定是可扩展的软件,支持挂接各种插件,处理各种类型的数据。

管理数据文件


二、界面的界定

相信许多人对以前的MSN Explorer记忆犹新,至那以后,我始终尝试着把网页作为软件的界面形式。因为网页的设计元素丰富、灵活,有很大的想象空间,而且用户看的最多的也是网页,所以网页界面更接近用户的使用习惯。于是,我们的软件嵌入浏览器控件,加入前进、后退,加入收藏夹、历史,首先使它看起来像个浏览器的样子,然后再增加自己有针对性地功能。后来发现加个标签栏实现多页浏览也不错,实现起来也不难。再后来发现,软件还行,既能解决实际问题,又能上网浏览,干脆再实现超级拖拽、鼠标手势增强一下浏览的特性。这就是一开始我开发“书包行CuteIE”的样子。直到IE7的发布,我知道IE浏览器至此不会停步不前了,它一次次的升级必然要解决与浏览网页相关的问题,并提供更好的用户体验。我们开发一个软件,嵌入一个浏览器控件没有错,加入前进、后退没有错,但如果你想取代IE浏览器的地位,那么你就错了?

因此,我决定为IE浏览器开发插件。你看,同样是网页样式的界面,而且天生就具有很有的浏览特性,何乐而不为呢?这就是整合的力量。一提到插件,人们就立马联想到流氓软件。流氓不是插件的错,就像三聚氰胺不是奶的错一样。

结合网页开发的特点,以及IE7、vista的特点,这个插件的开发一定要注意以下几个问题:

  1. 必须开发一个exe的驻守进程,作为服务使用。因为在vista下,IE7处于保护模式,IE7进程内部的插件不允许访问User级别的目录和注册表信息。显然,对于一个信息助理插件而言,必须一个exe进程提供信息读取与保存的服务。
  2. 可能会打开多个页面操作相同的数据。这就要求实现数据异步自动更新的机制。当一个页面中的信息改变时,其他页面的信息也要同时更新。这样就避免了数据的混乱。
  3. 为了增强页面的人机交互,必须采用ajax库。

MSN Explorer

书包行CuteIE

PIMShell

三、网页服务器与COM服务器

客户端是IE浏览器的网页,服务器是一个exe进程,这不就是将类似IIS网页服务器的功能搬到桌面了吗?多简单呀,实现一套网站式的应用,然后在桌面搭建一个网页服务器运行就OK了,就像Zimbra桌面一样。

其实在桌面还有一种方案更高效。exe进程是一个COM服务器,而客户端是一个COM客户端。客户端与服务器都通过COM进行交换。客户端、服务器端、插件都是COM组件,这样做有什么好处呢?想象一下office以及VBA吧。当一切都是COM组件时,我们就可以通过任何一个脚本代码来操作和整合这一切,定制个性化的方案,满足个性化的需要。

 

四、http://与pim://

我们知道桌面的网页服务器可以通过http://127.0.0.1/来定位页面资源,而COM服务器如何定位页面资源呢?这就需要实现一个可插拔协议(apph)pim://,比如要访问PIMShell的首页可以用pim://{general}/start.htm。自定义的pim协议约定了页面资源的访问方式:{general}代表名为general的插件。start.htm是在general插件所在的目录中查找名为start.htm的文件。自定义的pim协议本身也是一个COM组件,负责解析URL,并联系COM服务器进程取得相应的资源,返回给IE浏览器。

 

五、javascript ajax库与二进制ajax库

现在流行的javascript ajax库有许多,可以加快程序页面的开发。但javascript ajax库也有许多局限性:

  1. 编写复杂、容易出错:由于javascript是一个动态脚本语言,没有强类型约束,没有编译的阶段,虽然带来了灵活性,但许多潜在的bug不能提前被发现。当代码量很大时,就很容易出错,且不好调试。所以,javascript最好的作用是粘合剂。二进制ajax库由于经过了编译,所以许多bug可以提前发现,而且有很强大的调试器支持。
  2. 冗余代码多:一个稍微复杂一点的页面需要使用多个ajax行为组件,这就需要包含多个js文件,而且每打开一个页面,都要重新下载一次js文件。而二进制ajax库是编译完成的一个COM组件,在本地加载是很快的。
  3. 加载速度慢:javascript ajax库是没有编译的,所以页面在下载完js文件之后就要解析加载,这跟COM组件形式的二进制ajax库有着天壤之别。
  4. 整合性差:为了取得速度与功能的平衡,javascript ajax库只实现了少量的功能整合,各个ajax行为组件之间尽量保持独立。二进制ajax库由于是一个COM组件,所以可以充分的协调分配ajax行为之间的联系,具有很好的整合性。

所以既然是要开发一个本地的信息助理软件,为什么不使用二进制ajax库呢?!

既然二进制ajax库是一个COM组件,这跟Adobe AIR和MS Silverlight有什么区别吗?一个很明显的区别是:Adobe AIR和MS Silverlight重新设计了自己的界面描述语言(如MXML、XAML),而二进制ajax库仍使用现有的HTML标签,充分保留HTML页面的用户体验。也许,如果你说PIMShell本身就是一个RIA容器也未尝不可。

 

六、框架为插件的开发带来了哪些便利

PIMShell要想在同样的流程下处理各种类型的数据,就必须提供一个插件平台。当我们开发插件时,直接使用PIMShell这个框架的资源,只需开发独具特点的功能部分。那么,PIMShell到底为插件的开发带来了哪些便利呢?

  1. 数据对象:插件可直接读取保存数据。由PIMShell管理当前的数据文件。
  2. 流程(创建(收集)-〉整理-〉检索-〉展示-〉共享):插件只需实现相应的接口方法或配置xml字段
  3. 多线程:插件只需配置xml字段
  4. 异步自动更新:指的是当一个页面中的信息改变时,其他页面的信息也要同时更新。插件直接使用现有的ajax行为组件即可。
  5. 选项:插件只需配置xml字段,实现相应的页面。PIMShell自动整合并显示。
  6. 帮助:插件只需配置xml字段,实现相应的页面。PIMShell自动整合并显示。
  7. 多语言:插件实现相应的语言文件。程序页面中可直接使用{{name}}的形式引用,PIMShell自动替换。
  8. 过滤器:可以将搜索规则保存,以便日后使用。过滤器本身是用插件的形式实现的,可被其他插件使用。其他插件仅需要在xml中配置即可。
  9. 页与Windows侧边栏:页也是PIMShell中内置的一个插件,可通过webpart来组合展示PIMShell中的各种数据。同时,webpart可作为gadget直接应用于Windows侧边栏。其他插件根据需要实现自己的webpart即可。
  10. 弹窗服务:插件可直接使用,向用户报告相关的信息。
  11. 其他功能...

过滤器



Windows侧边栏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值