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

您好,歡迎來電子發燒友網! ,新用戶?[免費注冊]

您的位置:電子發燒友網>源碼下載>通訊/手機編程>

iOS中開發簡化view controller的方法

大小:0.3 MB 人氣: 2017-09-25 需要積分:1
導語
view controller通常是一個項目中最龐大的文件,因為它里面經常包含了不屬于它的代碼,同時這也使它成為代碼中最難以重用的部分。所以為view controller瘦身,讓其中的代碼復用性更強,把相關代碼放到正確的地方顯得尤其重要。
將Data Source和其他協議分離
為view controller瘦身最有效的方法就是把UITableViewDataSource中的代碼移動到相關的類中,具體的方法可以參閱《iOS應用開發 簡明TableView》中的相關實現。
而更進一步,不只是TableView,這個方法可以擴展到其他的協議上,比如UICollectionViewDataSource。如果在開發中選擇使用UICollectionView代替UITableView時,這個方法可以讓你幾乎不用修改viewController中的任何東西,甚至可以讓Data Source同時支持兩個協議,給予了極大的便利性。
將弱業務邏輯移到Model中
首先是代碼,以下的代碼是幫助用戶查找優先事項的列表:
-(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];
}
然而,如果把這些代碼移動到User類中會讓它變得更加明晰,這時ViewController.m中會是:
-(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];
}
將這些代碼移動的根本原因是因為ViewController.m是大部分業務邏輯的載體,本身代碼的復雜度已經很高,所以這類跟業務關聯不大的代碼比如日期轉換、圖像裁剪、設定過濾器等的操作可以分離到各自的類中完成,一方面為viewController減負,另一方面也能增進代碼的復用。
關于這個標題的翻譯我斟酌了比較久的時間,因為在原文中是“Move Domain Logic into the Model”,意為“把領域邏輯移到Model中”。對于“領域邏輯”一詞我進行過考究,大致意思為“穩定的、不會改變的邏輯關系”,同時在原文中也是使用了NSPredicate作為例子引用,而我認為其例子中的代碼也是與業務相關的,只不過關聯性不大,而且不會輕易改動,所以使用了“弱業務邏輯”一詞代替了“領域邏輯”一詞。
把數據處理的邏輯移到服務層
一些代碼可能沒辦法很有效的移動到model中,然而這些代碼卻和model中的代碼有清晰的關聯,對于這種問題,可以使用Store。比如在下面的代碼中,viewController需要完成從一個文件中獲取一些數據,并對其進行操作:
-(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];
}
事實上,view controller不需要清楚怎么實現這些東西,而應該將這些處理交給一個store object來完成。
通過對代碼進行分離,能夠增進代碼復用、對代碼進行單元測試、保持view controller整潔等。同時能夠讓view controller更多關注于業務本身的內容,把數據的讀取 、緩存、新建等操作交給服務層來處理。

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

      發表評論

      用戶評論
      評價:好評中評差評

      發表評論,獲取積分! 請遵守相關規定!

      ?
      主站蜘蛛池模板: 葵司中文第一次大战黑人 | 精品国产自在自线官方 | 91天堂国产在线 在线播放 | 香蕉97超级碰碰碰碰碰久 | 免费播放美女一级毛片 | 麻豆高潮AV久久久久久久 | 蜜桃狠狠色伊人亚洲综合网站 | 亚洲精品久久久久无码AV片软件 | 亚洲精品伊人久久久久 | 麻豆传煤网站网址入口在线下载 | 被同桌摸出水来了好爽的视频 | 成人无码国产AV免费看直播 | 亚洲一区二区免费看 | 中文字幕人成人乱码亚洲影视 | 老熟人老女人国产老太 | 999久久久国产 | 菠萝视频高清版在线观看 | 色综合久久久久久 | 狠狠操伊人 | 午夜想想爱午夜剧场 | 99在线国产视频 | 国产91无毒不卡在线观看 | 亚洲国产精品久久精品成人网站 | 天天躁日日躁狠狠躁AV麻豆 | 亚洲一区二区三不卡高清 | 国产午夜三区视频在线 | 国产AV精品白浆一区二 | 99香蕉精品视频在线观看 | 嫩草欧美曰韩国产大片 | 好男人视频免费高清在线观看www | 久久免费看少妇高潮A片特爽 | 18禁裸乳无遮挡免费网站 | 黄色a一级视频 | 国产1769一七六九视频在线 | 视频一区亚洲视频无码 | 国产亚洲精品精品国产亚洲综合 | 午夜男女爽爽羞羞影院在线观看 | 亚洲精品国产乱码AV在线观看 | 午夜亚洲国产理论片二级港台二级 | 国产高潮久久精品AV无码 | 欧美日韩中文字幕综合图区 |