针对接口编程,而不是针对实现编程

我们要做一个iOS平台的IMSDK,我们借助XMPP Framework来做这件事. XMPP Framework是由牛人Robbi Hanson已经封装好了的基于XMPP协议的IM框架,它的作用是作为一个和服务器交互的桥梁,让快速开发IM功能的人不必关系和服务器信令传输的具体实现细节,并且它已经被广泛用于实际项目中,我们打算基于它来做一个包含IM各种业务逻辑的封装,我们称之为IMSDK.

我们首先要做的事情就是进行模块划分。模块功能的合理划分也正是体现了对业务需求的理解。我们采用自底向上的方式来思考。

在最下面,XMPP Framework已经帮我们实现了消息的流,我们需要用好这个流,所以我们为XMPP Framework建立一个管理者,提供登录、消息发送和消息接收的接口。我们把这个管理者称之为服务层。接下来,我们在之上来考虑业务模块,具体的业务模块会有:登录模块、花名册模块、聊天模块、群组模块。分别命名为LoginModule、RosterModule、ChatModule、MUCManagerModule.模块划分完后,我们再来考虑消息从管理者如何分发到上面的模块。

在消息的分发上有多种思路,不过按照设计模式的原则针对接口编程而不是针对实现编程,我们采用了多态的思路。我们将业务模块抽取一个基类,命名为BaseModule。管理者面对的是BaseModule,BaseModule做两件事,一是:canHandleElement,另外一个是handleELement。子类模块重载即可。

至此,IMSDK的模块划分已经出来了。 enter image description here