导语
本文分享了IM模块重构的框架和近期为面向并行开发和业务线个性化需求而做的业务线拆分工作、项目经验和遇到的问题及解决方案,希望能给大家一些帮助。
背景
目前IM即时通信对于各大应用来说都是重要的功能部分,而且地位较高,线上沟通可显著提高用户体验和APP的活跃度及流量,且IM承载各个业务线用户的线上沟通,包括B2C和C2C场景。58对IM系统相当重视,为了给用户更好的IM体验,我们对IM做了深入的研发,包括公司内部的IM体系自研底层SDK和server服务及功能优化和版本迭代。
IM框架
1.原IM架构存在的问题
IM在58APP中是很早就存在的功能,之前的IM在维护和开发的过程中出现了一些问题,这些问题在早期的开发中应该很多功能模块也存在,问题如下:
1) API功能模糊,职责不不明确,可读性差,不利于开发维护;
2)代码逻辑长时间的迭代后出现复杂交错,难以梳理,问题难定位难修复;
3)后期需求开发因结构不清晰,需求开发出现堆积添加功能的问题;
4)无流程规范,不便于迭代;
5)业务需求实现较难或无法实现。
2.重构IM架构
IM作为重要的产品功能,上述问题需要解决,考虑其开发迭代中的健壮性和易扩展维护性,我们将IM整个功能体系进行了重构,并重新设计了IM框架,该框架已经历了1年多的版本迭代和需求开发,有优点也有缺点,目前还是比较稳定的。
a) 分层架构

IM在我们项目Project中是基础lib库,整体采用分层架构,采用经典三层架构,分层架构结合使用总结以下优缺点:
【 优点 】
1)高内聚、低耦合;
2)结构简单,容易理解和开发;
3)开发人员可以只关注整个结构中的其中某一层;
4)可以很容易的用新的实现来替换原有层次的实现;
5)每一层都可以独立测试,其他层的接口通过模拟解决;
6)可以降低层与层之间的依赖;
7)在后期维护的时候,极大地降低了维护成本和维护时间
8)有利于各层逻辑的复用;
【 缺点 】
1)代码量增加,开发周期延长;
结合框架的使用,在以下的分析讲解中会分层说明在项目中的作用;
I.表现层
l IM相关界面的逻辑,IM数据展示和界面操作交互;
l 功能模块化,UI界面区分出消息列表、会话列表、用户连接状态、消息未读数、帖子信息展示等功能;
II. 业务逻辑层
l 具体的操作逻辑,对表现层提供接口调用,链接数据访问层,承上启下;
l 用户输入的数据通过业务逻辑层的处理发给中间层;数据层返回的数据通过业务逻辑层发送给界面展示;
l 接口单一职责、易于业务逻辑维护;
l 该层为核心逻辑层,设计成两部分:
(1)主要逻辑管理类组和API接口,按IM主要功能设计管理类,处理表现层需要的逻辑处理;
(2)转换功能,主要职能是数据转换