色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

您好,歡迎來(lái)電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊(cè)]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>通訊/手機(jī)編程>

iOS中開發(fā)簡(jiǎn)化view controller的方法

大?。?/span>0.3 MB 人氣: 2017-09-25 需要積分:1
導(dǎo)語(yǔ)
view controller通常是一個(gè)項(xiàng)目中最龐大的文件,因?yàn)樗锩娼?jīng)常包含了不屬于它的代碼,同時(shí)這也使它成為代碼中最難以重用的部分。所以為view controller瘦身,讓其中的代碼復(fù)用性更強(qiáng),把相關(guān)代碼放到正確的地方顯得尤其重要。
將Data Source和其他協(xié)議分離
為view controller瘦身最有效的方法就是把UITableViewDataSource中的代碼移動(dòng)到相關(guān)的類中,具體的方法可以參閱《iOS應(yīng)用開發(fā) 簡(jiǎn)明TableView》中的相關(guān)實(shí)現(xiàn)。
而更進(jìn)一步,不只是TableView,這個(gè)方法可以擴(kuò)展到其他的協(xié)議上,比如UICollectionViewDataSource。如果在開發(fā)中選擇使用UICollectionView代替UITableView時(shí),這個(gè)方法可以讓你幾乎不用修改viewController中的任何東西,甚至可以讓Data Source同時(shí)支持兩個(gè)協(xié)議,給予了極大的便利性。
將弱業(yè)務(wù)邏輯移到Model中
首先是代碼,以下的代碼是幫助用戶查找優(yōu)先事項(xiàng)的列表:
-(void)loadPriorities
{
NSDate *now = [NSDate date];
NSString *formatString = @“startDate 《= %@ AND endDate 》= %@”;
NSPredicate *predicate = [NSPredicate predicateWithFormat:formatString, now, now];
NSSet *priorities = [self.user.priorities filteredSetUsingPredicate:predicate];
self.priorities = [priorities allObjects];
}
然而,如果把這些代碼移動(dòng)到User類中會(huì)讓它變得更加明晰,這時(shí)ViewController.m中會(huì)是:
-(void)loadPriorities
{
self.priorities = [self.user currentPriorities];
}
而User + Extensions.m中則是:
-(NSArray *)currentPriorities
{
NSDate *now = [NSDate date];
NSString *formatString = @“startDate 《= %@ AND endDate 》= %@”;
NSPredicate *predicate = [NSPredicate predicateWithFormat:formatString, now, now];
return [[self.priorities filteredSetUsingPredicate:predicate] allObjects];
}
將這些代碼移動(dòng)的根本原因是因?yàn)閂iewController.m是大部分業(yè)務(wù)邏輯的載體,本身代碼的復(fù)雜度已經(jīng)很高,所以這類跟業(yè)務(wù)關(guān)聯(lián)不大的代碼比如日期轉(zhuǎn)換、圖像裁剪、設(shè)定過濾器等的操作可以分離到各自的類中完成,一方面為viewController減負(fù),另一方面也能增進(jìn)代碼的復(fù)用。
關(guān)于這個(gè)標(biāo)題的翻譯我斟酌了比較久的時(shí)間,因?yàn)樵谠闹惺恰癕ove Domain Logic into the Model”,意為“把領(lǐng)域邏輯移到Model中”。對(duì)于“領(lǐng)域邏輯”一詞我進(jìn)行過考究,大致意思為“穩(wěn)定的、不會(huì)改變的邏輯關(guān)系”,同時(shí)在原文中也是使用了NSPredicate作為例子引用,而我認(rèn)為其例子中的代碼也是與業(yè)務(wù)相關(guān)的,只不過關(guān)聯(lián)性不大,而且不會(huì)輕易改動(dòng),所以使用了“弱業(yè)務(wù)邏輯”一詞代替了“領(lǐng)域邏輯”一詞。
把數(shù)據(jù)處理的邏輯移到服務(wù)層
一些代碼可能沒辦法很有效的移動(dòng)到model中,然而這些代碼卻和model中的代碼有清晰的關(guān)聯(lián),對(duì)于這種問題,可以使用Store。比如在下面的代碼中,viewController需要完成從一個(gè)文件中獲取一些數(shù)據(jù),并對(duì)其進(jìn)行操作:
-(void)readArchive
{
NSBundle *bundle = [NSBundle bundleForClass:[self class]];
NSURL *archiveURL = [bundle URLForResource:@“photodata” withExtension:@“bin”];
NSDate *data = [NSData dataWithContentsOfURL:archiveURL options:0 error:NULL];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
_users = [unarchiver decodeObjectOfClass:[NSArray class] forKey:@“users”];
_photos = [unarchiver decodeObjectOfClass:[NSArray class] forKey:@“photos”];
[unarchiver finishDecoding];
}
事實(shí)上,view controller不需要清楚怎么實(shí)現(xiàn)這些東西,而應(yīng)該將這些處理交給一個(gè)store object來(lái)完成。
通過對(duì)代碼進(jìn)行分離,能夠增進(jìn)代碼復(fù)用、對(duì)代碼進(jìn)行單元測(cè)試、保持view controller整潔等。同時(shí)能夠讓view controller更多關(guān)注于業(yè)務(wù)本身的內(nèi)容,把數(shù)據(jù)的讀取 、緩存、新建等操作交給服務(wù)層來(lái)處理。

非常好我支持^.^

(0) 0%

不好我反對(duì)

(0) 0%

      發(fā)表評(píng)論

      用戶評(píng)論
      評(píng)價(jià):好評(píng)中評(píng)差評(píng)

      發(fā)表評(píng)論,獲取積分! 請(qǐng)遵守相關(guān)規(guī)定!

      ?
      主站蜘蛛池模板: 秋霞在线看片无码免费| 国产精品XXXXX免费A片| jizz中国女人| 国产露脸无码A区久久| 美女18毛片免费视频| 小xav导航| a免费视频| 久久视频在线视频| 鸭子玩富婆流白浆视频| 德国黄色录像| 欧美末成年videos丨| 一本到2v不卡区| 国产欧美日韩中文视频在线| 欧美精品专区免费观看| 杨幂视频在线观看1分30秒| 国产 亚洲 另类 欧美 在线| 久久中文字幕亚洲| 亚洲午夜精品一区二区公牛电影院 | 欧美深深色噜噜狠狠yyy| 亚洲日韩中文字幕日本有码| 国产99久久亚洲综合精品西瓜tv | 国产在线一卡二卡| 受被三个攻各种道具PLAY| 99久久夜色精品国产亚洲AV卜| 九九热这里有精品| 亚洲精品久久久久AV无码| 国产精品久久久久影院| 日韩综合网| np高h肉文| 欧美精品一区二区在线电影| 6080yy奇领电影在线看| 巨爆乳中文字幕爆乳区| 中文字幕一区二区三区在线不卡 | 嫩草影院成人| 99亚洲精品| 男人网站在线观看| 99re 这里只有精品| 免费成人小视频| 97在线观看免费视频| 男人有噶坏| yw193.c国产在线观看|