- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
SCIM输入法架构分析
SCIM输入法架构分析(上)
开发者在线 B 更新时间:2007-12-26作者:absurd 来源:CSDN
本文关键词: 架构分析 输入法 SCIM
转载时请注明出处:/absurd/
文档格式与术语说明
1. 概述
SCIM是Smart Common Input Method的简称,它是一个输入法框架,由苏哲领导开发的。作为新一代输入法框架,其架构设计精良,具有很好的扩充性和灵性性,代码质量也非常高,称得上是国内经典的开源项目了。本文试图对SCIM的架构进行分析,了解它的架构,也许并不能帮助你更好的使用它,但对于添加新的输入法引擎,或者把它移植到其它平台,会有一些帮助。不过,即使单从学习的角度出发,了解它的架构,对于提高设计能力也是有很大好处的。
SCIM具有如下特点:
1. 完全面向对象的设计,并用C++实现。
2. 高度模块化。
3. 非常灵活的设计,支持动态加载不同的输入法,支持C/S模型运行。
4. 简单的编程接口。
5. 对UNICODE提供全面支持。
6. 提供了一些非常好用的工具函数,可以大大加快开发进度。
7. 提供了功能丰富的GUI panel。
8. 提供了统一的配置框架。
9. 很方便的集成现存的输入法。
10. 不但支持传统的键盘输入法,也支持手写识别等新式输入法。
2. SCIM的组成部件
l 配置模块(Config)
l 输入法前端模块(FrontEnd)
l 输入法引擎模块(IMEngine)
l 进程间通信模块(IPC)
l 输入法Panel
l 输入法Helper
SCIM是高度模块化的,每个模块都非常独立。为了做到这一点,一方面需要从设计出发,让各个模块完成单一的功能,使模块本身是高内聚的。而另一方面,SCIM也采用了几种高级的技术:
l 针对接口编程。对于一些具有不同实现的模块,为了减少与调用者的耦合,提供一个抽象的接口是有必要的。配合下文所介绍的动态加载机制,模块的调用者根本不关心采用的哪种实现,接口与实现是分开的,它使用的是模块的抽象接口,模块的实现变化时,对模块的使用者几乎没有影响。
l 模块动态加载机制。SCIM的整个设计干净利落,框架就是框架,其它任何附加的功能都是通过插件来实现的,在运行时才动态的加载进来。不同的平台对于动态库的处理方式有些不一样,SCIM实现了一个module类,对操作系统的底层函数进行了封装,同时提供面向对象的接口,使用更加方便。
l signal/slot机制。多个不同的对象协作起来完成一项任务,是面向对象设计的特点之一。消息在这些对象之间来回传递,特别是对于异步调用、事件/状态触发等情况,底层模块需要调用上层模块中的函数。这样,模块之间的层次关系不再像面向过程中那样明显。凡事有利必有弊,如果设计得不好,可能会造成上层与下层之间紧密的耦合,层次关系混乱。为了避免这个问题,SCIM里采用了signal/slot机制,上层向下层注册signal的处理器(slot)。当某个signal触发时,下层模块回调signal的处理器(slot)。
下面我们一一分析各个模块。
2.1. 配置模块(Config)
所谓众口难调,再好的软件也无法满足不同用户,不同的环境下的需求。采用配置文件来定制软件,是惯用的手法。SCIM也不例外,但是作为输入法,也有其特殊性,多个应用程序(如Panel、输入法服务进程、手写、输入设置界面等)往往要共享一些配置信息。
如果这些应用程序都直接去操作配置文件,不但可能会发生访问冲突,导致配置文件被破坏。也可能出现配置不同步的情况,一个应用程序修改了配置信息,而其它应用程序毫不知情,无法让配置信息在所有相关进程中即时生效。
最好的办法是,所有的配置信息由一个应用程序负责统一管理。只有它能够直接存取配置文件,其它应用程序,都需要通过向它发送请求来存取配置信息。这样,以上几个问题都迎刃而解了。
无论直接存取配置文件,还是从其它进程中存取配置信息,对使用者来说,并不需要关心。也就是说,使用者关心的是接口提供的功能,而不关心具体的实现,实现改变后,也不应该影响使用者。为了让各个应用程序采用统一的方式存取配置信息,SCIM中定义了一个ConfigBase接口,使用者通过它存取配置信息。
由此可见,SCIM中的配置模块有不同的实现,这些实现都要求遵循ConfigBase接口规范。SCIM提供了两个默认的实现,它们都是作为动态可加载模块形式出现的。一个称为Simpl
文档评论(0)