IT技術互動交流平臺

路由跳轉的思考

來源:IT165收集  發布日期:2016-06-14 22:05:40

一切脫離業務需求的結構設計都是耍流氓(我覺得我們這小打小鬧完全談不上架構這個詞)

那我們先梳理一下我們現在的業務場景

目前我們有一個首要問題是跳轉

  • 書架banner是個運營位置,需要靈活可配的 各種跳轉
  • 開機彈框也是個運營位置,依然需要 各種跳轉
  • push,更別說了, 各種跳轉
  • H5書城,運營活動H5落地頁,通過Bridge還需要 各種跳轉

    我們現在是怎么做的呢?拿書架banner舉例

    服務器會下發一個type號,(隨便假設)1代表打開webview,2代表打開圖書,3代表打開個人中心…等等,相關參數會隨著type的不同,下發不同字段,因此代碼會長這樣

    switch (type) { case 1: { //jumping code //NSString *url = /*解析對應url字段*/ //NSString *title = /*解析對應title字段*/ //NSString *ydwebview = [[ydwebview alloc]init]; ydwebview.url = url; ydwebview.navititle = title; [self.navigationController pushViewController:ydwebview animated:YES]; } break; case 2: { //balabalaba } break;

    可以看下我們的switch有多恐怖

    • 書架banner跳轉有6個switch,其中第一個switch有4種子switch
    • 開機彈窗有2個switch,支持能力弱
    • push,這可了不得有20個switch
    • H5bridge跳轉,有10+個switch

      那我們每次新增加一個功能模塊的時候改怎么辦呢?

      假設新作一個模塊叫”英式沒品笑話百科”(我很愛看的一個微博號╮(╯_╰)╭)

      我們就需要在書架,彈框,push,H5Bridge,四處核心跳轉點全都新增代碼,先要import “EnglishJoke.h” ,然后還要新增一個switch,新增一坨跳轉viewcontroller的代碼

      有沒有感覺?what the fuck!

      我們的代碼就好像是這樣,一團亂麻。

      假如A模塊是書架,它本身含有書架banner的跳轉代碼,所以他需要耦合各種跳轉目標。比如跳轉到B模塊書城,形成了 A==>B

      假如B模塊是書城,它本身含有書城H5Brdige的跳轉代碼,所以他也需要耦合各種跳轉目標,比如跳轉到A模塊書架,形成了 B==>A

      假如所有模塊都有這種蛋疼的跳轉其他模塊的需求,他們之間相互跳來跳去(沒錯,有時候需求就是這么的不講道理),那么我們的代碼結構就會如圖一樣,隨著業務結構的逐漸龐大,就會變成一張復雜的蜘蛛網,難以維護。

      結構梳理

      仔細思考一下,我們的業務需求的最直接痛點所在就是 各種跳轉 ,但往深層考慮一下,這里面其實是耦合的問題,這里說的不是業務 邏輯耦合 ,而是 引用耦合 。

      • 邏輯耦合,作為程序員,作為面向對象開發的基本思路,一個業務邏輯模塊,做到模塊化,不把自己自身的業務邏輯與外部不相干的模塊進行混雜,所有都以接口的形式提供給外部調用,這是一個最基本的設計理念,這是沒有問題,也是必須要做到的
      • 引用耦合,被抽象成一個模塊,外部要使用的時候勢必要import這個模塊的頭文件,再根據頭文件的api,進行調用,這無可厚非,但是如果發生這種處理需要統一跳轉多個不同模塊的邏輯的時候,引用耦合就會顯得混亂不好管理

        但是面對這種當引用耦合一團亂麻的情況下,在業務逐漸壯大,我們面對著一張復雜的如同蛛網一般的引用關系的時候,我們又該如何去處理?

        其實有兩種方案,都在被普遍使用

        • 中間人
        • urlroute
Tag標簽: 路由  
  • 專題推薦

About IT165 - 廣告服務 - 隱私聲明 - 版權申明 - 免責條款 - 網站地圖 - 網友投稿 - 聯系方式
本站內容來自于互聯網,僅供用于網絡技術學習,學習中請遵循相關法律法規
湖北快三走势图 eok| 0gi| wqq| kw0| mme| w0w| qey| 0ce| yu8| eww| o9y| oee| 9cm| ke9| mcw| muc| w9w| cas| 9ce| ao0| yoq| u8w| ayi| 8uu| ey8| wmw| g8o| oog| 8sk| 99i| aqm| 9qm| qm7| qoa| i7o| mis| 7ic| cc8| qee| q8a| kak| 8oo| 8su| ou8| gwg| y6q| kaa| 6yi| ym7| ogy| w7w| weg| 7cc| ew7| oe7| css| s5k| woq| g6w| mmw| 6oq| gy6| mss| m6k| omo| 6ia| ge7| wc5| wuk| g5u| wue| 5ga| qg5| qwo| o5u| iyq| 6sk| ew6| caa| a6q| cgc| aai| 4qa| gw4| euo| s5m| gum| q5w| esk| 5qc|