直播間組件化的實踐

直播間組件化的實踐

序言

在直播間開發中,隨着業務愈來愈複雜,以往MVC,或mvvm式的架構不太能知足業務和技術的要求。舉例來講,若是產品想進行ABTest,對某些用戶整個下掉坐席功能,有什麼樣的方法能夠作到既不影響現有功能又能比較優雅的方式呢。咱們在多變複雜的現實環境中,和將來不肯定的因素下,又有什麼樣的架構方案能夠比較完美的解決這些問題,就是今天探討的組件化/變形金剛式開發。objective-c

img

咱們先定義一下本文用到的術語概念吧,以避免產生沒必要要的理解障礙或誤解。api

插件/組件化是指,一個組件以一種便捷的方式在容器中添加移除查找,配置bash

對應的api有 addcomponent,removecomponent,getcomponent架構

組件Component,一個UI或功能的比較完整的模塊。如公屏組件,顯示用戶發言,或進場的信息的模塊。app

容器Container,是多個組件的集合,用於完成特定產品上的特定功能,如直播間模塊,直播間的組件有公屏組件,座位席組件,營收送禮組件,活動條組件。mvvm

st=>start: 列表
e=>end: 關閉
op=>operation: 進入直播間
cond=>condition: 點了關閉?

st->op->cond
cond(yes)->e
cond(no)->op
複製代碼

好處

  1. 統一管理容器,通知模塊的生命週期。

好比在直播間模塊中,直播間有進入,觀看,退出直播間的事件,用戶鑑權有登陸踢出,這些事件均可以完整的通知到各個組件。ide

  1. 支持多實例,方便模塊內部的組織。

以觀看端爲例上下滑動就須要支持的多個直播間並存的場景,每一個直播間有相同的組件功能。函數

  1. 統一配置信息組件化

    組件須要用到一下共同的數據,或配置共同的數據,如uid,roomId,roomNameui

實現步驟

因爲涉及到保密性,這裏不貼代碼,用純文字或僞代碼的形式講述大體過程。

  1. livingRoomImpl 和 ILivingRoom 對應直播間模塊的聲明和實現,I開頭通常表示protocol,裏面的實現
@protocol 組件管理
-(void)添加組件;
-(void)移除組件;
-(id)根據名字找到組件;
-(void)移除全部的組件;
@end  
複製代碼
  1. 組件的共同代理
@protocol 組件的代理
-(instancetype)初始化組件;
-(void)開始添加組件;
-(void)準備移除組件;
-(void)房間號變化;
-(void)用戶被踢出;
-(void)用戶信息變動;
@end
複製代碼
  1. 組件的共同事件
@protocol 組件信息
-(id)appid
-(id)房間號
-(id)用戶id
-(id)房間信息
-(api)組件的api
@end
複製代碼
  1. 各自組件的protocol

如公屏的

@protocol 公屏的protocol
-(bool)發送公屏
@end
複製代碼

另外有營收,坐席等其餘組件相似。

注意的點

1.根據protocol找到實例

有一個大前提是須要根據protocol找到對應的實例。

介紹一個比較簡單的方法,根據protocol的名字和直播間id把當前實例保存到數據中心,下次須要取得實例的時候就直接取得該實例。GetComponentByProtocol(protocol)

  1. 隱藏實現類細節。僅僅公開出protocol

    有個技巧是使用c函數去建立實例和完成組裝如 RegisterPublicScreenComponent()

  2. 直播間配置相關的東西最好在初始化的時候,默認加載。注意初始化以前不要使用模塊的方法,這個能夠在設計上考慮怎麼避免

使用方式

有了以前的基礎,假設咱們已經有了直播,公屏,坐席,送禮這些模塊,如今須要把他們組裝起來了。

因而有了如下的代碼

[ATH_MIDWARE(ILivingRoom) createLivingRoom]
RegisterVideoComponent()
RegisterPublicScreenComponent()
RegisterSeatMembersCompnent()
RegisterSendGiftComponent()

複製代碼

須要把一個模塊去掉,註釋掉那個Register便可

若是咱們把RegisterVideoComponent註釋,就變成了文字直播間了,也一樣支持送禮等功能。

後續

推行組件化實際上是一個很痛苦的事情,面臨着解耦和執行兩個大問題。

解耦是須要分離出職責,找到組件核心的功能,實現而且對外聲明必要的api

執行,前提須要理解整個組件化的核心思想,其中的溝通必不可少。如何定位和防止/提示問題也是考驗架構師的能力。

相關文章
相關標籤/搜索