91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS中基于協議的路由設計

發布時間:2020-07-31 23:00:58 來源:網絡 閱讀:642 作者:宜信技術 欄目:移動開發

一、背景

前段時間對我們自己的App做了結構上的重構,拋棄了之前簡單的MVC開發模式,原因是隨著App的業務線越來越多,單個頁面的功能越來越復雜,MVC開發模式導致整個Controller-layer的代碼越來越多。本文將分享重構中的Router模塊。

使用路由模式可以解決我們項目中頁面與頁面之間的耦合(因為我們App是視圖生命周期作為驅動,所以這里說是頁面,實際是控制器層),因為一個頁面功能太多就會引入過多的類,往往會造成import過多,不好管理。而且iOS中執行界面跳轉的時候,很容易產生模塊間的耦合。

iOS執行界面跳轉的時候,代碼如下:

[firstViewController.navigationController pushViewController:destinationViewController];

如果在firstViewController里面直接引入頭文件就會導致模塊間的耦合。我們這里就需要路由模塊去解決類似的問題。我們的設計是每個模塊都有自己的路由管理,路由主要職責應該有:

  • 管理模塊內部跳轉。

  • 聲明模塊的對外接口

  • 聲明模塊的依賴

二、模塊間的跳轉

這種設計是松耦合的,我們搜尋的模塊可以隨時被相同功能的模塊替換,這樣我們就實現了兩個模塊的解耦。

目前路由的設計限于以下幾種:

  • 字符串標識對應界面,例如URL Router

  • 利用Object-C特性,直接調用目的模塊的方法

  • 用protocol來和某個界面進行匹配

三、URL Router

目前絕大多數的路由是由字符串來打開某個頁面,代碼大概如下:

//注冊某個頁面在路由的url地址
[URLRouter registURL:@“Desination” handler:^(NSDictionary * userDic){
};
//使用路由
[URLRouter openURL:@“app://***Module/Destionation”];

傳遞一串參數URL就可以進行頁面間的跳轉,這種方案可以再運行時隨時更改路由規則,指向不同的頁面,也可以支持多級頁面跳轉。這種方案有極大的靈活性。

而且此種方案最容易跨平臺實現的,iOS, Android,PC都可以按照URL來進行路由。

iOS中可以通過URL Scheme進行進程間的通信,同App外面打開App中的某個頁面,此方案可以完美兼容URL Router。

當然這種方案缺點也是很明顯的:

第一、基于URL的設計只適合與UI界面,功能性的模塊是不能采用這種方案的,所以這種方案只適用于視圖驅動的模塊。

第二、這種方案維護比較困難,要維護一大批的字符串,還要維護傳參。

第三、安全性不高,因為只有在運行時才能檢查出錯誤,類似于swift早期中selector用字符串尋找的問題。

四、Protocol Router

這是我們采用的路由模式,代碼如下:

id<***ServiceProtocol> service = [[ProtocolRouter shareInstance] findService:@protocol(***service)];

這種設計方案安全性比較高,在編譯階段就可以檢測出問題,更適合于swift的設計思想,任何模塊都可以使用,包括功能模塊,不僅僅局限于UI模塊。此種方案就會缺少相應的動態性,不過可以做一層URL Router的Adapter層專門用于動態性的需求。

基于Protocol的設計方案不會引起耦合,我們可以輕易替換掉相同功能的目的模塊,這種方案也適用于各種解耦,例如Appdelegate的解耦。

以上就是我們在程序中實行組件化的一步,隨著App容量的增大,組件化是必不可少的一步,它可以讓我們的App更規范,模塊的重用性更高。

作者:崔曉迪

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

深圳市| 太谷县| 开鲁县| 凤台县| 昭平县| 建宁县| 慈溪市| 彰化市| 随州市| 天气| 余干县| 平乡县| 鹿邑县| 江源县| 三亚市| 涡阳县| 衡山县| 石河子市| 台州市| 赫章县| 乐山市| 叶城县| 苗栗市| 尼勒克县| 广灵县| 临城县| 富锦市| 三河市| 疏勒县| 麟游县| 宜州市| 木兰县| 同心县| 德保县| 济南市| 尼木县| 龙泉市| 桂阳县| 湟中县| 霞浦县| 临沧市|