IOS整體項目層級構建,ios層級構建

來源:互聯網
上載者:User

IOS整體項目層級構建,ios層級構建

在建立IOS項目時,若有一個比較明確的層級架構,將對於今後代碼的維護或者功能的擴充很有協助;本文將通過一個執行個體來展現我對於層級的一些觀點;裡面有一些零碎的知識點可能無法全部介紹,到時提供原始碼進行下載,也希望有其它更好的觀點可以提出來;

一:首先瞭解整個項目的情況

注意:項目中結合Pod進行一些第三方外掛程式的管理,項目中已經把幾個比較常用的第三方進行引用;因為上面幾個都是比較常見的第三方外掛程式,就不在這邊詳細介紹,關於如何使用Pod可以通過網上其它資料進行瞭解;對於如何一個項目建立多個Tag的知識也可以網上搜尋;當然你也可以點擊這邊查看;

二:主專案的分層情況

注意:主專案中的分層主要包含四個模組,Main(主要)、Expand(擴充)、Resource(資源)、Vender(第三方),還有本項目是有多個Tag,用於區分不同的版本,比如本地環境測試版、產品版,主要是通過Tag來區分,不同的標識對應不同的串連地址;當然也可以設定其它不同的內容;

2.1 Main(主要)模組的內容

此模組主要目的是為了存放項目的頁面內容,比如MVC的內容,Base(基類)用於存放一些公用的內容,其它功能模組的提取,方便繼承調用;在本執行個體中已經在BaseController整理的一個公用的ViewController

 

2.2 Expand(擴充)模組的內容

此模組主要包含Const、Macros、Tool、NetWork、Category、DataBase六個子模組;

2.2.1 Macros(宏)主要存放宏定義的地方,這邊有兩個宏檔案,Macros.h主要是項目的一些主要宏,比如字型、版本、色值等,而ThirdMacros.h主要用於存放一些第三放SDK的key值;

2.2.2 Tool(工具類)主要存放一些常用的類,此處Logger用於存放日誌的封裝協助類,Reachability用於存放判斷網路狀態的協助類;

2.2.3 Network(網路)這邊主要用到YTKNetwork 是猿題庫 iOS 研發團隊基於 AFNetworking 封裝的 iOS 網路程式庫,這邊是對它進行一些修改,為了滿足不同Tag及不同的功能模組可能訪問不同URL的要求;

2.2.4 Category(分類)主要用到Git上面iOS-Categories分類的內容,多建立一個Other用於存放平時要擴充的分類;

 

2.3 Resource(資源)模組的內容

資源模組主要包含三方面,Global(全域)、Image(圖片)、Plist(設定檔);

2.3.1 Global用於存放項目一些全域的內容,包含啟動項的內容LaunchScreen.storyboard、頭部引用PrefixHeader.pch、語言套件File.strings

2.3.2 Image用於存放圖片資源,可以根據功能模組進行再分不同的xcassets檔案;

2.3.3 Plist用於存放plist檔案,主要是本項目中會建立多個的Tag,而每個Tag都會有自個的plist檔案進行管理,所以統一存放方便管理;

 

2.4 Vender(第三方)模組的內容

雖然項目中已經用Pod來管理第三方外掛程式,但對於一些可能要進行修改的第三方可以存放在這邊,本執行個體中引用的幾個比較常用的第三方外掛程式,簡單介紹其中的幾個,GVUserDefaults是對UserDefaults的封裝,簡單就可以用於存取操作;JDStatusBarNotification是在狀態列提示效果的外掛程式;ActionSheetPicker底部彈出如時間選擇、選項的外掛程式;QBImagePickerController是照片選擇外掛程式,支援多選並可以設定最多選擇張數;

 

三:Network(網路)介紹

因為項目中關於Network的運用比較多,本執行個體又對它進行的修改,這邊就單獨進行講解;首先分享兩個介紹關於YTKNetwork知識的串連地址;

YTKNetwork 使用基礎教程
https://github.com/yuantiku/YTKNetwork/blob/master/BasicGuide.md

YTKNetwork 使用進階教程
https://github.com/yuantiku/YTKNetwork/blob/master/ProGuide.md

在針對每個請求時,本執行個體又增加一個訪問類型,用於區分對應的串連首碼

#ifndef NetWorkEnvironment_h#define NetWorkEnvironment_htypedef NS_ENUM(NSInteger,SERVERCENTER_TYPE){    ACCOUNT_SERVERCENTER,    PICTURE_SERVERCENTER,    BUSINESSLOGIC_SERVERCENTER,    UPDATEVERSION_SERVERCENTER};#endif /* NetWorkEnvironment_h */
#import "NetWorkBaseUrlConfig.h"static NSString *const developer = @"developer";static NSString *const product = @"product";static NSString *const ACCOUNT_SERVERCENTER_Key=@"ACCOUNT_SERVERCENTER";static NSString *const PICTURE_SERVERCENTER_key=@"PICTURE_SERVERCENTER";static NSString *const BUSINESSLOGIC_SERVERCENTER_key=@"BUSINESSLOGIC_SERVERCENTER";static NSString *const UPDATEVERSION_SERVERCENTER_key=@"UPDATEVERSION_SERVERCENTER";@interface NetWorkBaseUrlConfig()@property(nonatomic ,assign) SERVERCENTER_TYPE netType;@property(nonatomic ,strong) NSMutableDictionary *configDictionary;//開發測試環境@property(nonatomic ,strong) NSDictionary *develpoerDictionary;//產品環境@property(nonatomic ,strong) NSDictionary *productDictionary;@end@implementation NetWorkBaseUrlConfig+(instancetype)shareconfig{    static id share;    static dispatch_once_t onceToken;    dispatch_once(&onceToken, ^{        share = [[NetWorkBaseUrlConfig alloc] init];    });        return share;}-(id)init{    if (self == [super init]) {        //測試環境        self.develpoerDictionary=@{ACCOUNT_SERVERCENTER_Key:@"http://private-eda65-mock.com/",PICTURE_SERVERCENTER_key:@"圖片首碼",BUSINESSLOGIC_SERVERCENTER_key:@"商務邏輯首碼",UPDATEVERSION_SERVERCENTER_key:@"版本升級首碼"};        //產品環境        self.productDictionary=@{ACCOUNT_SERVERCENTER_Key:@"http://private-eda66-mock.com/",PICTURE_SERVERCENTER_key:@"圖片首碼",BUSINESSLOGIC_SERVERCENTER_key:@"商務邏輯首碼",UPDATEVERSION_SERVERCENTER_key:@"版本升級首碼"};                self.configDictionary = [NSMutableDictionary dictionary];        [self.configDictionary setObject:self.develpoerDictionary forKey:developer];        [self.configDictionary setObject:self.productDictionary forKey:product];    }    return self;}-(NSString*)urlWithCenterType:(SERVERCENTER_TYPE)type{    NSString *urlResult=@"";    NSString *validEnvironment = @"";        //過濾不同Tag    #ifdef LOCAL    validEnvironment=developer;    #else    validEnvironment=product;    #endif        NSString *urlKey = @"";    switch (type) {        case ACCOUNT_SERVERCENTER:            urlKey = ACCOUNT_SERVERCENTER_Key;            break;        case PICTURE_SERVERCENTER:            urlKey = PICTURE_SERVERCENTER_key;            break;        case BUSINESSLOGIC_SERVERCENTER:            urlKey = BUSINESSLOGIC_SERVERCENTER_key;            break;        case UPDATEVERSION_SERVERCENTER:            urlKey = UPDATEVERSION_SERVERCENTER_key;            break;        default:            break;    }    urlResult = self.configDictionary[validEnvironment][urlKey];    return urlResult;}@end

注意:#ifdef LOCAL 就是區分不同的Tag標識,此項目把本地測試的Tag標識定為LOCAL,然後在每個請求中設定其要訪問的類型;

ACCOUNT_SERVERCENTER(登入地址首碼),PICTURE_SERVERCENTER(圖片地址首碼),BUSINESSLOGIC_SERVERCENTER(商務邏輯首碼),UPDATEVERSION_SERVERCENTER(版本升級首碼)

develpoerDictionary(測試),productDictionary(產品)用於存放不同的串連首碼地址,若有其它版本的Tag就要再建立相應的字典;

#import "LogInApi.h"@interface LogInApi(){    NSString *_username;    NSString *_password;}@end@implementation LogInApi- (id)initWithUsername:(NSString *)username password:(NSString *)password {    self = [super init];    if (self) {        _username = username;        _password = password;    }    return self;}- (NSString *)requestUrl {    return @"user/login";}- (YTKRequestMethod)requestMethod {    return YTKRequestMethodPost;}-(SERVERCENTER_TYPE)centerType{    return ACCOUNT_SERVERCENTER;}- (id)requestArgument {    return @{             @"user_name": _username,             @"user_password": _password             };}@end

此處設定訪問的首碼為ACCOUNT_SERVERCENTER類型的地址

    LogInApi *reg = [[LogInApi alloc] initWithUsername:@"username" password:@"password"];    [reg startWithCompletionBlockWithSuccess:^(YTKBaseRequest *request) {        NSLog(@"狀態代碼%ld",request.responseStatusCode);        LoginModel *model=[[LoginModel alloc]initWithString:request.responseString error:nil];        NSLog(@"響應內容:%@",model.access_token);            } failure:^(YTKBaseRequest *request) {        NSLog(@"Error");    }];

調用上面那個Api的操作內容;並對還回內容進行JSONModel轉換;

 

其它內容導航:

IOS比較常用的第三方及執行個體(不斷更新中)  地址:http://www.cnblogs.com/wujy/p/4747998.html

IOS開發基礎知識片段-導航 地址:http://www.cnblogs.com/wujy/p/4571611.html

 

項目原始碼還在整理完善中,若現在想得到原始碼可以留下郵箱地址,過些天也會提供;

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.