前言
tigase官方號稱高度抽象和組件化。這篇文章就記錄一下我研究組件化的相關設計
概述
我的理解tigase高度組件化是所有的關鍵的功能的類,它都稱之為組件,即只要繼承于BasicComponent,它都可以成為組件,BasicComponent類實現了基于組件的實現和抽象了所有組件需要完成的操作和定義。我們自定義組件的時候,只需要定義一個類繼承BasicComponent類,然后重寫我們的自己需要的方法就行了,加載組件的時候就只需要在配置文件(config.tdsl)中新增一行組件的類信息(如下所示:自定義MyComponent組件)
myComponentName (class: tigase.muc.MyComponent) {}
tigase就能利用反射加載我們自定義的組件。那我們就來看窺探一下這個類的基本設計。個人的理解他這樣設計的好處是,組件的底層設計全部給我們做好了,我們只需要繼承拿來使用就行了,如果需要修改就根據業務需求對組件進行簡單的重寫就可以快速進行業務邏輯的開發。和模版模式設計有異曲同工之妙。
BasicComponent(tigase-server-module中)繼承類圖
為了證明我說的只要繼承BasicComponent的都叫做組件,我們可以看一下,tigase的核心類基本都是繼承自BasicComponent組件。
tigase官方的架構圖
tigase的核心類包括:
- 連接管理器(ConnectionManager):用于處理客戶端的各種連接
- Session管理器(SessionManager):用于管理用戶的連接的Session
- 消息路由器(MessageRouter):用戶處理消息各種路由轉發等等操作
- 集群連接管理器(ClusterConnectionManager):用于管理集群相關的連接
- 群聊組件(MUCComponent): 用戶群聊信息
- 發布訂閱組件(PubSub): 用于發布訂閱相關功能實現
- ...??
PS(因為tigase是多模塊項目,就沒有貼MUCComponnet等組件的繼承圖,但是都是繼承了BasicComponent類的)
類圖設計&繼承關系
BasicComponent設計類圖
由圖可知,BasicComponent類集多功能于一身,其核心的功能定義是基于ServerComponent接口,定義關于核心的數據包處理,初始化,初始化完成,獲取組件信息。其他的接口就接口隔離原則,提供BasicComponent的功能包括:
- ClusteredComponentIfc接口:提供集群的控制器和斷連,連接的處理方法
- XMPPService接口:提供服務發現相關的功能定義
- VHostListener接口:提供域名監聽相關的功能的定義,包括設置域名管理器等等
- ConfigurationChangedAware接口:提供監聽配置動態修改的功能
- Initializable接口:提供組件可初始化相關的功能
小結
tigase高度組件化其實就是基于接口隔離原則,將每個組件都需要的功能在BasicComponent類上面實現,如果其他人需要自定義實現組件的話,直接繼承BasicComponent類即可。這就是tigase的組件化思想。