理解關(guān)于Beehive的設(shè)計(jì)思想
Beehive的使用, 可以分3個(gè)核心的內(nèi)容
1.Service 服務(wù)
2.Module 模塊
3.podSpec 依賴注入
BeeHive主要是把我們平時(shí)使用的所有的業(yè)務(wù)功能,以單一模塊的形式進(jìn)行解耦.
Module與Service
- 在BeeHive當(dāng)中最重要的兩個(gè)概念是Module 與Service,對應(yīng)成中文可以翻譯成“模塊”與“服務(wù)”。Module是有生命周期的桂对,其調(diào)用的時(shí)機(jī)是由事件來觸發(fā)的回俐,事件包括了系統(tǒng)事件,通用事件以及自定義事件鳍置。對于Module而言识补,BeeHive實(shí)現(xiàn)了隊(duì)列化回調(diào)Module方法蹂安,開發(fā)人員可以給某個(gè)系統(tǒng)事件注冊多個(gè)Module蝴悉,BeeHive會依次調(diào)用不同的Module處理方法。Service則是單純的代碼實(shí)現(xiàn)模塊瘾敢,可以是實(shí)現(xiàn)某個(gè)功能的代碼或業(yè)務(wù)代碼拍冠,Service是沒有生命周期的,在任何時(shí)候都可以調(diào)用簇抵。BeeHive借鑒了Spring的Service設(shè)計(jì)思想庆杜,Module與Service需要對接口進(jìn)行抽象,通過接口來關(guān)聯(lián)兩個(gè)不同的模塊碟摆,從而最大的降低代碼的耦合性晃财。
簡單粗暴理解為 : 它們都是構(gòu)建一個(gè)數(shù)據(jù)結(jié)構(gòu),然后根據(jù)這個(gè)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)它的生存環(huán)境典蜕,并讓它在這個(gè)環(huán)境中按照一定的規(guī)律不停地運(yùn)動断盛,在它們的不停運(yùn)動中設(shè)計(jì)一系列與環(huán)境或者與其他個(gè)體完成信息交換。
- 把Bean比做一場演出中的演員愉舔,Context就是這場演出的舞臺背景钢猛,而Core應(yīng)該就是演出的道具了。只有它們在一起才能具備能演出一場好戲的最基本的條件轩缤。當(dāng)然有最基本的條件還不能使這場演出脫穎而出命迈,還要它表演的節(jié)目足夠精彩贩绕,這些節(jié)目就是Spring能提供的特色功能了。
- Spring解決了一個(gè)非常關(guān)鍵的問題壶愤,它可以讓你把對象之間的依賴關(guān)系轉(zhuǎn)而用配置文件來管理淑倾,也就是它的依賴注入機(jī)制。而這個(gè)注入關(guān)系在一個(gè)叫Ioc的容器中管理征椒,
用自己的話總結(jié) :
- BeeHive是一個(gè)把我們需要封裝的業(yè)務(wù)邏輯單獨(dú)抽離整理到一個(gè)Module中, 把業(yè)務(wù)邏輯從越來越臃腫的業(yè)務(wù)模塊中抽離出來.
- Service是單純的代碼實(shí)現(xiàn)模塊, 可以面向協(xié)議編程的思想來理解, Service告訴你這個(gè)Module里面有什么樣的功能. Module注冊了Service中的協(xié)議并實(shí)現(xiàn)
- 整個(gè)組件化的方案都是使用Cocoapod來管理的, 也就是podspec管理整個(gè)組件化的依賴注入.
與BeeHive組件化形成對比的方案
去Model化 : iOS應(yīng)用架構(gòu)談 組件化方案
CTMediator : CTMediator的組件化方案
組件化的方案可以算是一個(gè)架構(gòu)思想,這里需要使用哪種需結(jié)合項(xiàng)目業(yè)務(wù)的整體實(shí)現(xiàn).
利用Beehive實(shí)現(xiàn)的Demo : LgMainProject
項(xiàng)目架構(gòu)圖
LgMainProject
|
| - LgMainProject (主項(xiàng)目)
|
| - LgComponents (組件)
|
| _ LgFramework (遠(yuǎn)程倉庫)
| _ LgPublic (本地倉庫)
| _ LgUIKit (本地倉庫)
模塊思想 :
項(xiàng)目框架 :
參考文檔 :
蘑菇街娇哆、滴滴、淘寶陕靠、微信的組件化架構(gòu)解析
3分鐘讓你的框架支持cocoapods,podspec文件講解
蘑菇街 App 的組件化之路
BeeHive 框架實(shí)現(xiàn)原理分析
BeeHive官方源碼