亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 編程設計 > 正文

我的iOS工程結構(總結和工程實踐)

2020-07-14 13:23:04
字體:
來源:轉載
供稿:網友

好的架構不是設計出來的,而是進化而來的!本文是一位學習iOS開發者根據多年的經驗總結了iOS工程結構,穩重總結了在開發iOS項目中工程實踐,非常實用,推薦過來,一起來看看吧,希望對大家有所幫助

130813_FT_MandatoryCodeAcademy.jpg.CROP.rectangle3-large.jpg

寫在前面

從2011年底開始學習iOS開發,到現在也已經快3年了,雖然中途沒有一直進行iOS的開發(總是在Android和iOS間切換),但始終沒有離開,而我現在的工作也一樣,在iOS和Android間來回游走,正如我博客的slogan一樣,“In Android&iOS”。其實對我來說,兩個平臺沒有絕對的好壞,我都喜歡、我都熱愛。有人會說,同樣的產品在不同平臺做兩次不會覺得厭煩嗎?這個問題我會給出肯定的回答,不會!因為如果你真的喜歡你所做的產品,做多少次都不會覺得煩,每一次的復盤都是一次改進的過程,很多創新都是在重復的工作中產生的。在技術層面,同一套思想用不同的技術來實現,本身就是一個加強對不同平臺技術鞏固和理解的過程,技術本來就是來承載和表現業務的,在實現業務的過程中加強對業務的理解、實現對業務的創新,這或許也就是堆代碼和寫程序的區別吧!^_^

我的iOS工程結構

接下來,我就簡單介紹下我做iOS項目時使用的工程結構。首先要說的是,這只是我的工程結構,并不是規范,或許它存在很多問題和不規范的地方,我只是把它分享出來,給大家提供一個參考,也希望收到大家的一些反饋來幫助我改進!

項目結構

下圖是我做iOS項目的一個常用工程結構,整體模式還是按照MVC的結構,只是在每一層做了一些細分處理,下面就簡單介紹下。

1.png

iOS工程中沒有像Java那樣非常嚴格的分包機制,不過在iOS工程中我們也可以通過Group的方式在工程中實現邏輯分包,這樣更有利于我們組織和管理代碼,使工程結構更清晰和易于理解。在我的工程結構中,主要有如下group:

Application:這個group中放的是AppDelegate和一些系統常量及系統配置文件;

Base:一些基本父類,包括父ViewController和一些公用頂層自定義父類,其他模塊的類一般都繼承自這里的一些類;

Controller:系統控制層,放置ViewController,均繼承于Group Base中的BaseViewController或BaseTableViewController;

View:系統中視圖層,由于我比較喜歡通過代碼實現界面,所以這里放的都是繼承于UIView的視圖,我將視圖從ViewController中分離出來全部放在這里,這樣能保持ViewController的精簡;

Model:系統中的實體,通過類來描述系統中的一些角色和業務,同時包含對應這些角色和業務的處理邏輯;

Handler:系統業務邏輯層,負責處理系統復雜業務邏輯,上層調用者是ViewController;

Storage:簡單數據存儲,主要是一些鍵值對存儲及系統外部文件的存取,包括對NSUserDefault和plist存取的封裝;

Network:網絡處理層(RTHttpClient),封裝了基于AFNetworking的網絡處理層,通過block實現處理結果的回調,上層調用者是Handler層;

Database:數據層,封裝基于FMDB的sqlite數據庫存取和管理(RTDatabaseHelper),對外提供基于Model層對象的調用接口,封裝對數據的存儲過程。

Utils:系統工具類(AppUtils),主要放置一些系統常用工具類;

Categories:類別,對現有系統類和自定義類的擴展;

Resource:資源庫,包括圖片,plist文件等;

以上是對我的工程結構中各個group的介紹,通過以下登錄模塊的系統類圖,可以比較直觀的看到這種工程結構的全貌。

2.png

整體來看分為三大塊,黃色區域的模型和業務邏輯層(M),藍色區域的視圖層(V),紅色區域的視圖控制器層(C),其中,黃色區域實現了對業務邏輯和數據處理的封裝,對應他們的上層ViewController,可以實現非常簡單的接口調用,將業務復雜性從ViewController中抽離出來,通過模塊化的方式,保證ViewController的可讀性和可維護性。

保持ViewController簡單

往往大家都會抱怨iOS中ViewController寫著寫著就會越來越臃腫,那時因為隨著業務的復雜,功能的增多,所有的邏輯都包含在ViewController中,還包括一些諸如UITableViewDatasource的代理方法,使得ViewController臃腫不堪,可維護性極低,耦合性也很高,為了使ViewController能更簡單,便于維護和后續的開發,給ViewController瘦身就顯得尤為必要,我的做法主要有三個方面。

1、View視圖與ViewController分離

如果你用Storyboard或者xib這是當然的,我比較喜歡手寫代碼,所以不在ViewController里面嵌入過多的View層代碼是保證ViewController簡單的方法之一,那么,可以將View部分的代碼單獨封裝到一個繼承自UIView的子類當中,然后通過自定義Delegate實現View與ViewController的通信。

2、業務邏輯與ViewController分離

將網絡請求處理和復雜的業務邏輯以及數據的存取工作單獨放到Handler層,對ViewController只暴露簡單的調用接口和通過block或delegate實現的回調,這樣不僅能使我們的工程模塊化,也能大大降低ViewController的復雜性,就不會出現既包括網絡處理又包括數據處理的冗長的ViewController代碼了。Handler通過block或delegate將處理完的結果回調給ViewController,ViewController再將結果與View視圖層相關聯處理,這樣就真正起到了MVC的作用,整體原則就是,讓ViewController只關系和負責處理與它相關的事。

在BaseHandler.h中可以定義一些簡單的業務處理規則:

  1. #import <Foundation/Foundation.h>  
  2. /**  *  Handler處理完成后調用的Block 
  3.  */ typedef void (^CompleteBlock)(); 
  4.  /** 
  5.  *  Handler處理成功時調用的Block  */ 
  6. typedef void (^SuccessBlock)(id obj);  
  7. /**  *  Handler處理失敗時調用的Block 
  8.  */ typedef void (^FailedBlock)(id obj); 
  9.  @interface BaseHandler : NSObject 
  10.  /** 
  11.  *  獲取請求URL  * 
  12.  *  @param path  *  @return 拼裝好的URL 
  13.  */ + (NSString *)requestUrlWithPath:(NSString *)path; 
  14.  @end 

在LoginHandler中就可以定義對LoginViewController暴露的調用接口,在LoginHandler中封裝負責的網絡處理和業務處理邏輯,對LoginViewcontroller來說,只需要調用這個方法并傳入對應的UserEntity實體對象和處理成功和失敗狀態下的回調block就可以了。

  1. #import "BaseHandler.h" #import "UserEntity.h" 
  2.  @interface LoginHandler : BaseHandler 
  3.  /** 
  4.  *  用戶登錄業務邏輯處理  * 
  5.  *  @param user  *  @param success 
  6.  *  @param failed    */ 
  7. - (void)executeLoginTaskWithUser:(UserEntity *)user success:(SuccessBlock)success failed:(FailedBlock)failed;  
  8. @end 

 3、Datasource或Delegate與ViewController分離

在iOS開發中經常用到的UITableView包含了一系列的代理方法,這些方法往往也是使得ViewController變長變復雜的元兇之一,那么,將這些Datasource或Delegate分離出來也是行之有效的方法之一,例如,通過自定義Datasource類(實現UITableViewDatasource協議)來將跟UITableView相關的數據源處理代理方法都集中到一個特定的類當中,ViewController只需要設置這個自定義數據源類給UITableView,然后其他的就都可以交給自定義數據源類去處理了。

我參考了Lighter View Controllers上的介紹改進了一個BaseTableViewProtocol,基本上常用的一些場景是可以使用的,不過這個還得不斷優化以適應更多的場景,具體的代碼我放在Github上了,感興趣的同學可以去看看,使用方法可以參考上面鏈接中的介紹,基本類似,我的改進主要是支持對多section的適用。

BaseTableViewProtocol.h

BaseTableViewProtocol.m

寫在最后

以上是我在開發iOS項目中的一些總結和工程實踐,其中肯定還是存在很多問題的,我也在不斷尋求改進的方法,也歡迎各路高手給我提出意見和建議。關于這個工程結構的一個簡單事例我放在我的Github上了,感興趣的同學可以去看看RTLibrary-ios。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美高清视频一区二区| 欧美激情一区二区三级高清视频| 美乳少妇欧美精品| 神马国产精品影院av| 日韩免费观看网站| 国产97人人超碰caoprom| 日本精品在线视频| 久久久久久高潮国产精品视| 丝袜一区二区三区| 九九精品在线播放| 成人xxxxx| 亚洲free性xxxx护士白浆| 亚洲最大福利视频| 欧美视频裸体精品| 26uuu另类亚洲欧美日本老年| 欧美日韩在线视频一区| 久久视频在线视频| 在线观看免费高清视频97| 日韩久久精品电影| 久久精品国产2020观看福利| 成人免费黄色网| 国产经典一区二区| 一区二区在线免费视频| 国产亚洲美女精品久久久| 亚洲精品国产精品国产自| 91精品国产综合久久久久久蜜臀| 国产精品爽爽爽爽爽爽在线观看| 色综合久久88色综合天天看泰| 欧洲中文字幕国产精品| 亚洲护士老师的毛茸茸最新章节| 亚洲小视频在线| 国产97在线视频| 亚洲精品一区av在线播放| 久久久人成影片一区二区三区观看| 国产第一区电影| 欧美丝袜一区二区三区| 国产免费一区视频观看免费| 5566日本婷婷色中文字幕97| 俺也去精品视频在线观看| 欧美日韩精品在线| 国产精品自拍偷拍| 国产精品三级网站| 91免费精品视频| 欧美激情一区二区三区成人| 91高清在线免费观看| 中文字幕日韩av综合精品| 亚洲自拍偷拍在线| 亚洲男人天天操| 亚洲精品一区二区三区婷婷月| 久久在线视频在线| 国产91精品在线播放| 色综合导航网站| 欧美性xxxxhd| 亚洲国产精品悠悠久久琪琪| 亚洲成色777777女色窝| 97人人爽人人喊人人模波多| 色婷婷亚洲mv天堂mv在影片| 国产色综合天天综合网| 日韩成人在线免费观看| 欧美激情精品久久久| 国产一区二区三区欧美| 国产91精品视频在线观看| 姬川优奈aav一区二区| 欧美综合一区第一页| 亚洲精品电影网在线观看| 亚洲精品久久久久久久久久久久久| 成人性生交大片免费观看嘿嘿视频| 日韩黄色在线免费观看| 国产精品女人网站| 欧美性xxxxxx| 在线观看91久久久久久| 国自产精品手机在线观看视频| 国内精品中文字幕| 国产精品高精视频免费| 日韩av资源在线播放| 日韩精品高清在线观看| 国产日韩欧美中文| 日韩在线视频一区| 亚洲91av视频| 久久久久久久久电影| 亚洲黄在线观看| 国产精品va在线| 国产999在线观看| 精品夜色国产国偷在线| 欧美成人激情视频| 成人a在线视频| 日韩a**中文字幕| 欧美性猛交xxxx免费看| 亚洲裸体xxxx| 懂色aⅴ精品一区二区三区蜜月| 久久久91精品国产| 高清一区二区三区日本久| 国产精品丝袜视频| 中文字幕国内精品| 亚洲自拍偷拍区| 亚洲黄色www网站| 久久久久久久久久久91| 国产一区二区三区久久精品| 国产69久久精品成人| 性欧美在线看片a免费观看| 亚洲精品综合精品自拍| 狠狠做深爱婷婷久久综合一区| 久久黄色av网站| 777午夜精品福利在线观看| yw.139尤物在线精品视频| 成人av.网址在线网站| 亚洲色图校园春色| 成人h猎奇视频网站| 成人在线精品视频| 久久久久国产精品免费| 91九色视频导航| 欧美日韩国产区| 全亚洲最色的网站在线观看| 日本韩国欧美精品大片卡二| 亚洲韩国欧洲国产日产av| 久久精品视频在线播放| 国产中文字幕亚洲| 亚洲精品丝袜日韩| 国产精品久久精品| 国产精品久久久久久久午夜| 国产有码一区二区| 国产精品吊钟奶在线| 国产日韩欧美自拍| 久久久影视精品| 国内精品美女av在线播放| 欧美在线视频免费| 91禁国产网站| 久久久久久av| 久久天天躁狠狠躁老女人| xxx一区二区| 国产精品高潮呻吟久久av野狼| 久久亚洲欧美日韩精品专区| 亚洲**2019国产| 欧美体内谢she精2性欧美| 亚洲人成在线免费观看| 欧美国产第二页| 4k岛国日韩精品**专区| 97精品国产97久久久久久春色| 日韩中文字幕国产| 日韩av免费在线| 伊人青青综合网站| 97超碰蝌蚪网人人做人人爽| 欧美黑人巨大xxx极品| 色哟哟亚洲精品一区二区| 伊人男人综合视频网| 欧美视频在线免费看| 亚洲奶大毛多的老太婆| 久久九九有精品国产23| 国产香蕉精品视频一区二区三区| 麻豆乱码国产一区二区三区| 国产精品久久久久久中文字| 97人洗澡人人免费公开视频碰碰碰| 日韩电影中文字幕在线观看| 成人a免费视频| 欧美中文在线免费| 日韩精品中文字幕视频在线| 欧美在线视频播放| 91sao在线观看国产| 成人中心免费视频| 韩国一区二区电影| 国产不卡视频在线| 国产精品自拍视频| 精品视频在线播放| 久久人人看视频|