iOS組件化整體架構(gòu)

說組件化的結(jié)構(gòu),是指整個項目工程使用組件化模式開發(fā)時,整個項目中包含的所有組件結(jié)構(gòu)。而不是指某一個組件工程的結(jié)構(gòu)。某一個組件工程的結(jié)構(gòu),理論上我們是不用關(guān)心的,但是為了代碼風(fēng)格統(tǒng)一,我們可以做一些要求。

組件顆粒度

那么,問題來了,一個項目應(yīng)該怎么拆分組件呢?拆分多少個組件合適呢?按照什么標(biāo)準(zhǔn)進行組件的拆分呢?

這個問題只是拋出來,我不作回答。因為這個涉及到組件劃分顆粒度的問題。這個顆粒度的把握,是需要沉淀的。對組件劃分的太細(xì)會導(dǎo)致項目過于分散,劃分粒度太大會引起項目組件臃腫。項目都是有一個發(fā)展過程的,組件也一樣。所以,不斷進行重構(gòu)是掌握這個組件細(xì)化程度的最好方式。

但是,工作還是要進行,那么項目開始時,必須要定一個顆粒度!我的原則是:

? 抽出業(yè)務(wù)之外,即:不依賴業(yè)務(wù)的UI或方法函數(shù),規(guī)劃出不同的組件;

? 按需求業(yè)務(wù),完成一個業(yè)務(wù)流程的,當(dāng)成一個組件開發(fā)。若業(yè)務(wù)流程冗長且有分支的,可從分支處拆分成多個組件開發(fā);

這只是雛形,還是需要組件重構(gòu)沉淀出更好的顆粒度劃分。

不管組件的顆粒度是大還是小,項目中組件必須是有層級結(jié)構(gòu)的。有層級就表示了會有依賴,所以說項目組件化也是無法避免依賴關(guān)系的。準(zhǔn)確來說是,項目組件化避免的是業(yè)務(wù)之間依賴,因為不同業(yè)務(wù)屬于同一層級。我們定義同一層級的組件之間是不可以存在依賴關(guān)系的。

那么,該如何定義組件的層級結(jié)構(gòu)呢?

我們是這樣定義的:

首先,組件庫分為五大部分:業(yè)務(wù)模塊層、中間件層、部件層、定制層、基礎(chǔ)層。

依賴關(guān)系是這樣的:

? 業(yè)務(wù)模塊層 → 中間件層

? 業(yè)務(wù)模塊層 → 部件層→ 定制層→ 基礎(chǔ)層

這樣的依賴關(guān)系呈現(xiàn),大家應(yīng)該明白越向下底層的組件應(yīng)該盡量少量的更改,因為你的任何一次更改都將會影響到很多業(yè)務(wù)組件或很多部件。

我從由低至高的層級關(guān)系進行解釋:

基礎(chǔ)層

可以這樣定義基礎(chǔ)層,這一層的組件擁有以下特點:

? 可以用于其他項目工程;

? 組件里的方法必須考慮周全;

? 不應(yīng)該任何的業(yè)務(wù)邏輯;

在我的架構(gòu)中,基礎(chǔ)層現(xiàn)在包括了 網(wǎng)絡(luò)庫、工具庫、語言國際化。關(guān)于網(wǎng)絡(luò)庫,采用的是離散式網(wǎng)絡(luò)請求,接口對象化之后給業(yè)務(wù)調(diào)用提供靈活性,工具庫包括對系統(tǒng)工具庫的淺層封裝、第三方平臺SDK、第三方工具庫;語言國際化庫,放在最底層,是因為任何UI相關(guān)的都會涉及到語言國際化的問題。語言國際化庫中,對外提供的方法是穩(wěn)定,但是其中的國際化字符的key value是一直在增加的,因為外部調(diào)用是沒發(fā)生變化的,所以這里的內(nèi)部變化對上層的組件不會有大的影響。當(dāng)然需要對語言國際化有很好很嚴(yán)謹(jǐn)?shù)墓芾頇C制,不然會內(nèi)部紊亂的。

定制層

顧名思義,定制層就是針對項目定制的組件層。準(zhǔn)確地說是,項目基礎(chǔ)定制層。

在我的架構(gòu)中,定制層目前包括 項目環(huán)境配置庫、****App****風(fēng)格****UI****庫。

項目環(huán)境配置庫,主要用于:1、配置項目不同開發(fā)環(huán)境的請求地址;2、配置第三方平臺AppKey;

App風(fēng)格UI庫,我認(rèn)為一般稍成熟的App,UI那邊都會有一套自己的UI風(fēng)格。比如說:幾種字體、幾種顏色、幾種按鈕、幾種標(biāo)簽、幾種cell。是的,App風(fēng)格UI庫就可以封裝這些東西,這個庫的使用率越高,你的App風(fēng)格就會越統(tǒng)一。

部件層

多業(yè)務(wù)會使用+ 相對固定的UI + 需要接口請求+ 不摻雜業(yè)務(wù)邏輯。是的,我們可以從這幾個維度去定義一個部件組件。比如:上傳圖片組件、選擇地域地址組件、支付組件、分享組件。

中間件

它的存在就是為了業(yè)務(wù)組件,它的作用:

1、解除所有業(yè)務(wù)組件之間可能存在的耦合;

2、將App生命周期事件分散到所有業(yè)務(wù)組件中處理;

業(yè)務(wù)層

這一層其實沒什么好說的。在組件化思維中,這一層主要要考慮的是如何使用中間件,需要中間件做什么。在做一個業(yè)務(wù)組件初期一般需要考慮四個問題:

1、這個組件是否需要傳參才能被創(chuàng)建;

2、這個組件是否需要告訴調(diào)用方某個值(比如說狀態(tài));

3、這個組件是否需要在發(fā)生什么事件或變化時,需要其他業(yè)務(wù)知曉的;

4、這個組件有幾個入口;

這四個問題的解決都是要通過中間件來解決的。是的,中間件可以解決掉!

總結(jié):開發(fā)者銘記三點

1 不可出現(xiàn)反向依賴,只能上層依賴下層,不可反之

2 所有上層組件都能對下層組件充分利用使用,達到最大化的代碼復(fù)用!

3 腦中始終需要有組件分層架構(gòu)圖,明確自己所做組件屬于哪一層

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容