竭盡全力的去解耦的一次實(shí)踐戴尸,封裝一個TableView和一些功能組合的控件

可以先看看這個Demohttps://github.com/ming1016/DecoupleDemo罚拟。從這個Demo里可以看到Controller和View還有Store的頭文件里沒有任何Delegate亿卤,Block回調(diào),只有初始化和更新ViewModel的方法热凹。所有這些控件泵喘,請求,ViewController和視圖之間的聯(lián)系都是通過ViewModel來進(jìn)行的般妙,而viewModel也不進(jìn)行任何邏輯處理纪铺,只是簡單的起到描述和默認(rèn)值設(shè)置的作用。ViewController也被減輕的小得不能再小了碟渺,只需要初始化視圖和Store即可鲜锚。這也是我的一次嘗試,看看如何利用KVO能夠做到最大限度的解耦止状,和最大限度的減少代碼和接口烹棉。

可以先看看以前代碼最臃腫的地方在使用了新的思路后會變成怎么樣,首先是ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self addKVO];
    [self buildConstraints];
    self.tbStore = [[TestTableStore alloc] initWithViewModel:self.tbView.viewModel];
}

可以看到里面僅僅做了添加KVO怯疤,布局控件和初始化Store的工作。

封裝的TableView作為一個通用控件是不會去設(shè)置管理不同的Cell的催束,可以看看不用Delegate和Block是如何處理的集峦。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    self.viewModel.tableViewIdentifier = smTableViewIdentifier;
    self.viewModel.tableView = tableView;
    self.viewModel.cellIndexPath = indexPath;
    return self.viewModel.cell;
}

我覺得這樣應(yīng)該很簡化了。當(dāng)觸發(fā)到UITableView這個配置Cell的回調(diào)時,通過對ViewModel的鍵值的監(jiān)聽就能夠在任何地方對Cell進(jìn)行配置了塔淤,而不用通過繁瑣的Delegate和Block來層層回調(diào)了摘昌。

除了這里外,其它地方也用同樣的方法進(jìn)行了處理高蜂,比如說對新出現(xiàn)消息提示點(diǎn)擊使其消失只需要設(shè)置ViewModel里的isHideHintView的值的處理聪黎,還有對請求不同狀態(tài)顯示不同引導(dǎo)頁,只要是以前需要通過接口和回調(diào)的全部干掉备恤,用ViewModel去控制稿饰,下面可以看看我寫的ViewModel中,我將KVO分成了View Side和Data Side露泊,前者主要是響應(yīng)視圖方面的邏輯變化喉镰,后者Data Side是響應(yīng)不同的動作來產(chǎn)生對數(shù)據(jù)不同的處理,其它就都是些關(guān)于樣式和數(shù)據(jù)配置相關(guān)的了惭笑。

//---------------------------
//           KVO View Side
//---------------------------
@property (nonatomic, assign) BOOL isHideGuideView;             //是否顯示guide view
@property (nonatomic, assign) BOOL isHideHintView;              //是否顯示hint view
//下拉刷新上拉加載更多
@property (nonatomic, assign) SMTableRequestStatus requestStatus; //刷新狀態(tài)
//TableView Delegate
//通用
@property (nonatomic, strong) UITableView *tableView;
@property (nonatomic, strong) NSString *tableViewIdentifier;
//Cell
@property (nonatomic, strong) NSIndexPath *cellIndexPath;
@property (nonatomic, strong) UITableViewCell *cell;
//CellHeight
@property (nonatomic, strong) NSIndexPath *cellHeightIndexPath;
@property (nonatomic, assign) CGFloat cellHeight;


//---------------------------
//          KVO Data Side
//---------------------------
@property (nonatomic, assign) SMTableRefreshingStatus dataSourceRefreshingStatus; //請求狀態(tài)

縱觀整個項(xiàng)目侣姆,頭文件都很干凈,唯一有方法需要參數(shù)的也就是ViewModel沉噩。這種完全面向?qū)ο笏悸返木幊谭绞皆谛枨蠼?jīng)常變更的情況下優(yōu)勢就會慢慢顯露出來捺宗,對吧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末川蒙,一起剝皮案震驚了整個濱河市蚜厉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌派歌,老刑警劉巖弯囊,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異胶果,居然都是意外死亡匾嘱,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進(jìn)店門早抠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來霎烙,“玉大人,你說我怎么就攤上這事蕊连⌒” “怎么了?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵甘苍,是天一觀的道長尝蠕。 經(jīng)常有香客問我,道長载庭,這世上最難降的妖魔是什么看彼? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任廊佩,我火速辦了婚禮,結(jié)果婚禮上靖榕,老公的妹妹穿的比我還像新娘标锄。我一直安慰自己,他們只是感情好茁计,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布料皇。 她就那樣靜靜地躺著,像睡著了一般星压。 火紅的嫁衣襯著肌膚如雪践剂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天租幕,我揣著相機(jī)與錄音舷手,去河邊找鬼。 笑死劲绪,一個胖子當(dāng)著我的面吹牛男窟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播贾富,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼歉眷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了颤枪?” 一聲冷哼從身側(cè)響起汗捡,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎畏纲,沒想到半個月后扇住,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡盗胀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年艘蹋,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片票灰。...
    茶點(diǎn)故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡女阀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出屑迂,到底是詐尸還是另有隱情浸策,我是刑警寧澤,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布惹盼,位于F島的核電站庸汗,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏手报。R本人自食惡果不足惜夫晌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一雕薪、第九天 我趴在偏房一處隱蔽的房頂上張望昧诱。 院中可真熱鬧晓淀,春花似錦、人聲如沸盏档。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蜈亩。三九已至懦窘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間稚配,已是汗流浹背畅涂。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留道川,地道東北人午衰。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像冒萄,于是被迫代替她去往敵國和親臊岸。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評論 2 349

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

  • iOS網(wǎng)絡(luò)架構(gòu)討論梳理整理中尊流。帅戒。。 其實(shí)如果沒有APIManager這一層是沒法使用delegate的崖技,畢竟多個單...
    yhtang閱讀 5,174評論 1 23
  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,131評論 30 470
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫逻住、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,066評論 4 62
  • 文/夏沫 愛子心無盡迎献,歸家喜及辰瞎访。寒衣針線密,家信墨痕新忿晕。見面憐清瘦装诡,呼兒問苦辛。低徊愧人子践盼,不敢嘆風(fēng)...
    米子迪閱讀 632評論 4 5
  • 上周末我在「在行」約見了徐建春老師鸦采,學(xué)習(xí)的話題是“我的職業(yè)生涯我做主”,文章為我課后的一些總結(jié)和思考咕幻。 先拋個問題...
    丶常超閱讀 1,566評論 9 20