從代碼拆分到VIPER架構(gòu)演化

減小焦點(diǎn)墩莫,疊加信息

《ViewController代碼拆分實(shí)踐》
http://www.reibang.com/p/f30438b89bc6

上篇文章里邓厕,我們把ViewController按視圖剧浸、網(wǎng)絡(luò)請(qǐng)求、本地存儲(chǔ)缺虐、頁面跳轉(zhuǎn)四層進(jìn)行拆分。

拆分之后,ViewController的代碼足夠少绣的,而因?yàn)槭遣捎脜f(xié)議對(duì)象的方式進(jìn)行拆分,后續(xù)的可維護(hù)性和可擴(kuò)展性又足夠高。

今天屡江,我們多走一步:實(shí)現(xiàn)VIPER架構(gòu)芭概。

我們看看拆分代碼后的ViewController.h。

#import "ViewInterface.h"
#import "APIInterface.h"
#import "StoreInterface.h"
#import "RouteInterface.h"

@interface ViewController : UIViewController<ViewInterface>

@property (nonatomic, weak) id<ViewInterface> viewModel;
@property (nonatomic, weak) id<APIInterface> apiHandle;
@property (nonatomic, weak) id<StoreInterface> storeHandle;
@property (nonatomic, weak) id<RouteInterface> routeHandle;
@end

引用4個(gè)Interface惩嘉,聲明了4個(gè)協(xié)議對(duì)象罢洲。把ViewControler里的4個(gè)層次的事件消息通過4個(gè)協(xié)議對(duì)象進(jìn)行分發(fā)。

4個(gè)文黎,我們還是嫌太多惹苗。如果只有1個(gè)就好了,這樣我們做ViewController消息分發(fā)時(shí)就不用考慮向哪個(gè)協(xié)議對(duì)象分發(fā)了耸峭。

說干就干桩蓉,把4個(gè)協(xié)議對(duì)象合成1個(gè):

@interface ViewController : UIViewController<ViewInterface>

@property (nonatomic, weak) id<ViewInterface,APIInterface,StoreInterface,RouteInterface> eventHandle;
@end

把原來由4個(gè)協(xié)議對(duì)象分別引用方法的地方,全部改為由eventHandle引用劳闹。

self.hotList = [self.eventHandle unarchive];
[self.eventHandle loadData];
return [self.eventHandle configureWithCell:cell data:data];
[self.eventHandle pushDetailInterfaceFromViewController:self detailData:detailData];
[self.eventHandle archiveWithObject:self.hotList];

把4個(gè)Interface的引用院究,合并成一個(gè):

#import <UIKit/UIKit.h>

#ifndef ViewControllerSplit_EventInterface_h
#define ViewControllerSplit_EventInterface_h
@protocol ViewInterface <NSObject>

@optional
- (void)hotListWtihData:(NSArray *)data;
- (UITableViewCell *)configureWithCell:(UITableViewCell *)cell data:(NSDictionary *)data;
@end

@protocol APIInterface <NSObject>

@optional
- (void)loadData;
@end

@protocol StoreInterface <NSObject>

@optional
- (id)unarchive;
- (void)archiveWithObject:(id)object;
@end

@protocol RouteInterface <NSObject>

@optional
- (void)pushDetailInterfaceFromViewController:(UIViewController *)viewController detailData:(NSDictionary *)detailData;
@end
#endif

于是ViewController.h被簡化到了極致:

#import <UIKit/UIKit.h>
#import "EventInterface.h"

@interface ViewController : UIViewController<ViewInterface>

@property (nonatomic, weak) id<ViewInterface,APIInterface,StoreInterface,RouteInterface> eventHandle;
@end

我們新建一個(gè)實(shí)際處理四層消息的類,名字為Presenter:

#import <Foundation/Foundation.h>
#import "EventInterface.h"

@interface Presenter : NSObject<ViewInterface,APIInterface,StoreInterface,RouteInterface>
@end

至此本涕,我們完成了土制代碼拆分到高大上的VIPER架構(gòu)演化的全部過程业汰。

VIPER,無非是通過Presenter統(tǒng)一轉(zhuǎn)發(fā)ViewController的消息菩颖,使ViewController從臃腫和緊耦合中解脫出來蔬胯,讓ViewController更小更少依賴,方便維護(hù)位他、復(fù)用氛濒。

Presenter收到ViewController轉(zhuǎn)發(fā)過來的消息,分別向Interactor(API, Store)鹅髓、WireFrame(View, Route)轉(zhuǎn)發(fā)處理舞竿。

本質(zhì)上都一樣:通過消息轉(zhuǎn)發(fā),把代碼扔出本類窿冯,進(jìn)行黑箱復(fù)用骗奖。

后記(下面以聊家常為主,沒時(shí)間沒興趣的朋友請(qǐng)直接忽略):

準(zhǔn)確地說醒串,我前天晚上非常開心执桌。因?yàn)槲覐摹稛o頭騎士異聞錄×2》想到了:只有深鉆才能擺脫無聊。

我們很害怕生活很普通芜赌。普通得自己像沒在這個(gè)世界存在過一樣仰挣。但如果我們繼續(xù)膚淺、表面地活著缠沈,不管我們多么有錢有勢(shì)膘壶,還是無法擺脫恐怖的無聊感错蝴。

而那些但凡有任何一件事情可以去深鉆的人,卻不會(huì)有這樣的無聊感颓芭,他們只有深鉆精彩的忙碌感顷锰。只擅長這個(gè)啊。時(shí)間不夠用不夠用啊亡问。

從此官紫,我努去讓自己把關(guān)注的焦點(diǎn)一再減少縮小,然后把所有時(shí)間精力人脈全部投入到這個(gè)足夠小的點(diǎn)上州藕。通過高強(qiáng)度的信息轟炸束世,消滅掉這一個(gè)點(diǎn)。徹底解決掉它慎框。

隨著我越鉆越深良狈,自然會(huì)有越來越多有趣的人和事會(huì)找到我。那時(shí)笨枯,我只需要隨隨便便地忙碌著薪丁,生活就會(huì)被得足夠有趣。

我自己做了一家三口焦點(diǎn)表馅精,沒有這方面經(jīng)驗(yàn)的朋友可以參考一下:

我:
老婆| 兒子| 健身| 讀書| 編程
日語| 玩具| 腹腰| 算法| 項(xiàng)目

老婆:
老公| 兒子| 健身| 讀書| 手工
日語| 玩具| 瑜珈| 天文| 科技

兒子:
媽媽| 爸爸| 健身| 讀書| 外出
日語| 玩具| 跑步| 科技| 藝術(shù)

世界上的所有事情严嗜,無論什么基礎(chǔ),無論什么背景洲敢,無論什么環(huán)境漫玄,通通全部都必須按兩步去解決:
1?減小焦點(diǎn)
2?疊加信息

今天想明白一件事情:粉絲群的功能。
粉絲群只有一個(gè)功能:粉絲幫助群主思考压彭,粉絲幫助群主做事睦优。

沒錯(cuò),我建粉絲群壮不,不是為了幫任何人汗盘,而只是希望能得到別人的幫助。如果你覺得我值得你幫询一,歡迎進(jìn)來隐孽。如果你只希望我或我的粉絲群友幫你,請(qǐng)你滾開健蕊,我踢不留情:)

iOS開發(fā)菱阵,讀書狂魔
清醒瘋子利炳根粉絲群:147043528

長久以來,我一直害怕別人覺得我是新手缩功、太弱晴及。其實(shí)沒關(guān)系,我現(xiàn)在確實(shí)還很新手很菜很弱啊掂之。但抗俄,不管怎么樣脆丁,我會(huì)繼續(xù)努力啦世舰。

分享一部紀(jì)錄片《中國的秘密》
http://qianmo.com/u/6292/5

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末动雹,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子跟压,更是在濱河造成了極大的恐慌胰蝠,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件震蒋,死亡現(xiàn)場(chǎng)離奇詭異茸塞,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)查剖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門钾虐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人笋庄,你說我怎么就攤上這事效扫。” “怎么了直砂?”我有些...
    開封第一講書人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵菌仁,是天一觀的道長。 經(jīng)常有香客問我静暂,道長济丘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任洽蛀,我火速辦了婚禮摹迷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘郊供。我一直安慰自己峡碉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開白布颂碘。 她就那樣靜靜地躺著异赫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪头岔。 梳的紋絲不亂的頭發(fā)上塔拳,一...
    開封第一講書人閱讀 49,821評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音峡竣,去河邊找鬼靠抑。 笑死,一個(gè)胖子當(dāng)著我的面吹牛适掰,可吹牛的內(nèi)容都是我干的颂碧。 我是一名探鬼主播荠列,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼载城!你這毒婦竟也來了肌似?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤诉瓦,失蹤者是張志新(化名)和其女友劉穎川队,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體睬澡,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡固额,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了煞聪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斗躏。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖昔脯,靈堂內(nèi)的尸體忽然破棺而出啄糙,到底是詐尸還是另有隱情,我是刑警寧澤栅干,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布迈套,位于F島的核電站,受9級(jí)特大地震影響碱鳞,放射性物質(zhì)發(fā)生泄漏桑李。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一窿给、第九天 我趴在偏房一處隱蔽的房頂上張望贵白。 院中可真熱鬧,春花似錦崩泡、人聲如沸禁荒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽呛伴。三九已至,卻和暖如春谒所,著一層夾襖步出監(jiān)牢的瞬間热康,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來泰國打工劣领, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留姐军,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像奕锌,于是被迫代替她去往敵國和親著觉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容