Casa文章的評論答復

1, 同一個命名域內部不需要用CTMediator

問: 模塊內部需不需要走CTMediator。比如A1跳A3,直接A1中引入A3,然后push過去就行了,外部是根本跳不到A3的。
那也就是說內部不想公布的跳轉就不走CTMediator了?

答:
對啊,我之前以為你說的A1、A2、A3是不同的模塊來著。
其實判斷是否應該使用mediator的重要參考條件是:調用方是否有必要引入響應方的命名域。
像你這樣命名域本來就已經在里面了,就沒必要走mediator了。mediator是給那些需要調用功能但又不需要引入命名域的調用者去使用的。

2, app 組件化的目的究竟是什么?

1,為了提高多人開發的機動性,
2.為了提高代碼的遷移能力,
3.降低大型App開發的復雜度,組件化可以理解成“分治法”。

3, 關于不同模塊間的category放置問題


實際工作中,每一個模塊的category單獨是一個pod,然后這個pod由這個模塊的開發者維護,每更新一版模塊,這個模塊的開發者就有責任去維護對應的category。
不存在針對接口封裝service類的需要,更沒有單獨搞個web后臺的需要。也不應該把這個category放在模塊的pod中,也不能把所有的category都放在一個pod中。
使用者需要調用哪個模塊,就只引入哪個模塊對應的category,然后調用這個category里面對應的方法就可以了。
最后,category是否放在同一個pod中,跟安裝包的大小沒有任何關系。

把category放在模塊的pod中,這會使得響應者模塊不得不依賴mediator,這種依賴是完全沒有必要的。在將來模塊復用的時候會帶來問題,具體問題的復雜度取決于你mediator的復雜度。
你現在看mediator好像干干凈凈的什么都沒有,但是業務復雜了之后,router、cache、validate邏輯就有可能變多,這都是說不好的事情。所以模塊應該盡量做到能不依賴mediator就不依賴mediator,不要貪圖所謂的方便引入額外耦合,一點都不值得。

4.模塊間更新的處理

問:

如果所有的業務組件都依賴于網絡組件,此時網絡組件發生了一次變更,要求業務組件必須更新。
這樣的話,如果沒做組件化之前,可能一個批量替換就搞定了(假定是這樣。。)
但是做了組件化之后,有很多事情要做:1、只能一個組件一個組件的修改,因為不在同一個工程中了2、每個組件都得更新 podspec,并打 tag,更新 podspec 源倉庫3、修改相關業務組件和主工程 podfile 里依賴的版本號
這樣就多了好多工作量,不知道您有沒有遇到這類問題呢?

答:

我們私有pod引入的時候都不帶版本號的,默認大家都使用最新的。
各業務線在podupdate之后各自解決更新導致的編譯問題,不過這種情況極少,一般都是一次更新就所有都更新過去了。

5 關于引用第三方庫

untitled.png

6. 考慮進行這種組件化的方案,以盡量降低各組件之間的耦合

問1:

隨著我們的項目模塊越來越大,也在考慮進行這種組件化的方案,以盡量降低各組件之間的耦合,我的思路1. 各模塊組件化這個可以參考你這篇文章實現,應該能比較好的解決2. 各模塊組件化后,希望各組件有自己單獨工程,而不必將代碼全部堆到主工程內這樣做的好處很明顯,各模塊單獨開發互相不影響3. 各模塊的代碼可以套一個殼工程里面,可以單獨運行,可以單獨遞交測試這樣方便QA測試,也便于版本控制,另外也可以保證代碼訪問安全,相關模塊的開發人員只有自己模塊的代碼訪問權限,因為有殼工程,所有不影響他調試代碼4. 封裝一些公用的組件,譬如登錄,一些utility庫等,其他模塊可以引用和使用這些組件。譬如有一個組件叫“我的賬單”,那運行這個組件肯定先需要登錄,那么包含“我的賬單”的代碼的殼工程就需要使用“登錄”這個組件的功能5. 最后有一個主工程,會將所有組件打包生成最后的ipa安裝包
以上就是我這邊的一個大致思路,如果不對希望可以指點一下,目前也有幾個問題想問一下1. 這么多組件(包括自己組件的殼工程),主工程該如何組織。用CocoaPods的私有源的方式嗎?如果是的話該如何實現呢2. 對一些公共的圖片資源,又該如何處理呢,譬如組件A和組件B都需要用到一張公共的圖片,組件A的殼工程和組件B的殼工程都會包含這張圖片,但是為了避免資源重復,在把這兩個組件引入到主工程的時候該如何處理呢? 是把公共的圖片打成一個bundle的形式共享給各個組件使用么?3. 每個組件肯定有一些網絡API的調用,那這些網絡API是寫在每個組件里面(感覺這樣太分散),還是說弄一個公共的負責所有網絡請求的API組件(感覺這樣也不太合理,這個公共的組件就需要知道每個組件的網絡請求的參數及邏輯)
以上是我的一些思考和疑問,希望有空的時候能回復一下。 最好是能寫個簡單的demo

答1:

1. 是的,自建私有pod源。
2. 我們目前是所有的圖片單獨放在一個pod里面的,然后業務pod依賴這個圖片pod。這樣比較容易做去重。我是所有的圖片都在一個pod里面,這個pod的podspec只寫了要引入resource
3. 我們網絡層是rtnetworking,這是一個單獨pod。然后所有的apimanagers都按照業務分好類放在各自單獨的一個pod中。由于我的項目是離散型api設計,任何有網絡請求的業務pod,就都依賴apimanager的pod就好了。
關于離散型api設計,你可以去看一下前面的網絡層文章。

7.如果ModuleA需要取得ModuleB的異步返回值需要怎么處理。比如其他模塊調用登陸模塊

 參數中帶上block,用block接收異步返回值。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 該文章屬于劉小壯原創,轉載請注明:劉小壯[http://www.lxweimin.com/u/2de707c93d...
    劉小壯閱讀 93,631評論 266 518
  • 文/劉小壯(簡書作者投稿)原文鏈接:http://www.lxweimin.com/p/67a6004f6930 前...
    藍鷗科技閱讀 8,738評論 1 56
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,933評論 18 139
  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,241評論 4 61
  • 線性編碼的提出是基于這樣一個問題激活函數的輸出是在一定范圍內的,比如sigmoid函數輸出在【0,1】但是我們的原...
    陳繼科閱讀 1,307評論 0 0