面試準備第七篇

組件化


1.組件化有什么好處?

1.1業(yè)務(wù)分層,解耦,使代碼變得可維護;

1.2有效的拆分,組織日益龐大的工程代碼,使工程目錄變得可維護;

1.3便于各業(yè)務(wù)功能拆分,抽離,實現(xiàn)真正的功能復(fù)用;

1.4業(yè)務(wù)隔離,跨團隊開發(fā)代碼控制和版本風(fēng)險控制的實現(xiàn);

1.5模塊化對代碼的封裝性,合理性都有一定的要求,提升開發(fā)同學(xué)的設(shè)計能力;

1.6在維護好各級組件的情況下,隨意組合滿足不同客戶需求;(只需要將之前的多個業(yè)務(wù)組件模塊在新的APP中進行組裝即可快速迭代出下一個全新APP)。

2.如何組件化解耦的?

2.1分層

基礎(chǔ)功能組件:按功能分庫,不涉及產(chǎn)品業(yè)務(wù)需求,跟庫Library類似,通過良好的接口供上層業(yè)務(wù)組件調(diào)用;不寫入產(chǎn)品定制邏輯,通過擴展接口完成定制;

基礎(chǔ)UI組件:各個業(yè)務(wù)模塊依賴使用,但需求保持好定制擴展的設(shè)計;

業(yè)務(wù)組件:業(yè)務(wù)功能間相對獨立,相互間沒有Model共享的依賴;業(yè)務(wù)之間的頁面調(diào)用只能通過UIBus進行跳轉(zhuǎn);業(yè)務(wù)之間的邏輯Action調(diào)用只能通過服務(wù)提供;

2.2中間件:target-action,url-block,protocol-class

3.為什么CTMediator方案優(yōu)于基于Router的方案?

Router的缺點:

3.1在組件的實施過程中,注冊URL并不是充分必要條件。組件是不需要向組件管理器注冊URL的,注冊了URL之后,會造成不必要的內(nèi)存常駐。注冊URL的目的其實是一個服務(wù)發(fā)現(xiàn)的過程,在iOS領(lǐng)域中,服務(wù)發(fā)現(xiàn)的方式是不需要通過主動注冊的,使用runtime就可以了。另外,注冊部分的代碼的維護是一個相對麻煩的事情,每一次支持新調(diào)用時,都要去維護一次注冊列表。如果有調(diào)用被棄用了,是經(jīng)常會忘記刪項目的。runtime由于不存在注冊列表。那就也不會產(chǎn)生維護的操作,維護成本就降低了。由于通過runtime做到了服務(wù)的自動發(fā)現(xiàn),拓展調(diào)用接口的任務(wù)就僅在于各自的模塊,任何一次新接口添加,新業(yè)務(wù)添加,都不必去主工程做操作,十分透明。

在iOS領(lǐng)域里,一定是組件化的中間件為openURL提供服務(wù),而不是openURL方式為組件化提供服務(wù)。如果在給App實施組件化方案的過程中是基于openURL的方案的話,有一個致命缺陷:非常規(guī)對象(不能被字符串化到URL中的對象,例如UIImage)無法參與本地組件間調(diào)度。

在本地調(diào)用中使用URL的方式其實是不必要的,如果業(yè)務(wù)工程師在本地間調(diào)度時需要給出URL,那么就不可避免要提供params,在調(diào)用時要提供哪些params是業(yè)務(wù)工程師很容易懵逼的地方。

為了支持傳遞非常規(guī)參數(shù),蘑菇街的方案采用了protocol,這個會侵入業(yè)務(wù)。由于業(yè)務(wù)中的某個對象需要被調(diào)用,因此必須要符合某個可被調(diào)用的protocol,然而這個protocol又不存在于當前業(yè)務(wù)領(lǐng)域,于是當前業(yè)務(wù)就不得不依賴public

Protocol。這對于將來的業(yè)務(wù)遷移是有非常大的影響的。

CTMediator的優(yōu)點:

調(diào)用時,區(qū)分了本地應(yīng)用調(diào)用和遠程應(yīng)用調(diào)用。本地應(yīng)用調(diào)用為遠程應(yīng)用調(diào)用提供服務(wù)。

組件僅通過Action暴露可調(diào)用接口,模塊與模塊之間的接口被固化在了Target-Action這一層,避免了實施組件化的改造過程中,對Business的侵入,同時也提高了組件化接口的可維護性。

方便傳遞各種類型的參數(shù)。

4.基于CTMediator的組件化方案,有哪些核心組成?

CTMediator中間件:集成就可以了

模塊Target_%@:模塊的實現(xiàn)及提供對外的方法調(diào)用Action_methodName,需要傳參數(shù)時,都統(tǒng)一以NSDictionary*的形式傳入。

CTMediator+%@擴展:擴展里聲明了模塊業(yè)務(wù)的對外接口,參數(shù)明確,這樣外部調(diào)用者可以很容易理解如何調(diào)用接口。

?著作權(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)容

  • 前言: 本文轉(zhuǎn)自前同事casa的博文,這篇文章是基于runtime實現(xiàn)的iOS組件化方案,其實iOS組件化方案基本...
    monkey01閱讀 1,729評論 1 2
  • 目錄 1. 組件化是什么 2. 組件化的作用 3. 組件化實現(xiàn) 4. 中間件通用工具 5. BeeHive和CTM...
    wangzzzzz閱讀 6,122評論 0 29
  • 組件化 1.組件化有什么好處? 業(yè)務(wù)分層、解耦,使代碼變得可維護; 有效的拆分、組織日益龐大的工程代碼,使工程目錄...
    刺骨寒閱讀 910評論 0 1
  • 芳菲歇去 夏木正蔭庇 知了聲聲吵人醒 誰家小姑娘鬧脾氣 嚎嚎大哭淚不停 一會又笑的起勁 來去匆匆 恰比翻書意 出門...
    墨舞竹閱讀 409評論 4 11
  • 1 如今,似乎每個孩子背后,都有一對焦慮的父母,一個焦慮的家庭。 不信?北京的房價,從年初到如今,漲了50%,其中...
    麥子兜兜閱讀 808評論 6 5

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