關(guān)于代碼風(fēng)格的一些見解(一)

UIViewController和UIView

Controller顧名思義,主要是用來做控制的,View是用來做UI展示的.但在實際的開發(fā)中,往往會將ControllerView都作為UI層來展示,這樣做會有什么問題?

  • View將不光負(fù)責(zé)展示控件,還需要處理業(yè)務(wù)數(shù)據(jù),業(yè)務(wù)邏輯.對于一個業(yè)務(wù)邏輯很強(qiáng)的View這樣做還可以,比如用戶的頭像控件,就是和用戶個人資料有很強(qiáng)業(yè)務(wù)關(guān)系的,這種做法是合理的.但如果是一個普通的View,比如一個底部工具條,里面有很多按鈕,顯然再用View處理業(yè)務(wù)邏輯和數(shù)據(jù)是不合理的,這樣的View是沒法復(fù)用的,如果你說:我不復(fù)用View,那就呵呵了.
  • Controller里面可能存在大量的UI控件,各種創(chuàng)建控件的代碼,各種代理,回調(diào),數(shù)據(jù)讀取,網(wǎng)絡(luò)請求,業(yè)務(wù)數(shù)據(jù)適配,這樣的ViewController將會變得非常龐大.ViewController就是一個頁面,一個完整的頁面,要用ViewController就是想用些和生命周期有關(guān)的ViewController特有的東西,如果只是通過ViewController加載一個view,那最好直接用view.通常來講ViewController是不能夠復(fù)用的,如果你從StoryBoard中連了很多控件到ViewController中,而那個StoryBoard中要是還有很多約束,那隨著業(yè)務(wù)的發(fā)展,這份代碼離無法維護(hù)的日子就不遠(yuǎn)了.

那Controller應(yīng)該做什么:

  1. 初始化UI(極少了的UI細(xì)節(jié),各種自定義UIView)
  2. addObserver 設(shè)置delegate,可能還有addTag,addGesture(極少的)
  3. 同步取本地數(shù)據(jù),異步取網(wǎng)絡(luò)數(shù)據(jù).(UI展示的數(shù)據(jù),即使是同步數(shù)據(jù)也不應(yīng)該在Controller里初始化),對于數(shù)據(jù),這里應(yīng)該是封裝了的數(shù)據(jù),也就是說,一個View對應(yīng)一個Model,而不應(yīng)該是零散的數(shù)據(jù),拼湊的.
  4. 在代理和observer的回調(diào)中更新UI,這里的更新UI只要1句話,把數(shù)據(jù)全都通過Viewpublic interface 丟給View,至于View想用什么,想怎么更新,都是它自己的事情(這里的View包括自定義的TableViewCell,CollectionViewCell,自定義的View),當(dāng)然對于部分更新UI還是要在View中暴露幾個public property.
  5. 如果你使用自動布局或者Masonry要手動碼一些addConstraints這樣類似的代碼,或者你使用frame,那你要在viewDidLayoutSubviews設(shè)置每個viewframe
  6. 最核心的部分,負(fù)責(zé)頁面的跳轉(zhuǎn),跳轉(zhuǎn)也就是一句話,[XXXViewController xxx:];這里需要在ViewController里面實現(xiàn)一個或者多個類方法,方便外部調(diào)用和傳遞參數(shù),這里參數(shù)還是建議封裝成一個model,只傳一個參數(shù),里面具體是什么自己去解析.這里ViewController只關(guān)心跳哪里,具體怎么跳,不需要寫在本ViewController里.
  7. 動態(tài)展示一些子view,alertView,messageBox, 這里是把ViewController弄亂的最好的地方,因為動態(tài)添加的view可能是動畫,所以盡量把view中動畫有關(guān)的東西都封裝到view中,ViewController只通過1-2句代碼創(chuàng)建View并完成動畫,而ViewViewController傳遞消息和數(shù)據(jù)統(tǒng)統(tǒng)都通過代理的方式,最后ViewController只要在某個代理里remove這個view就可以了.
    所以整個ViewController寫下來import的東西應(yīng)該是類似這樣的
#import "XXXViewController.h"
#import "XXXModel.h"
.....
#import "XXXView.h"
....
#import "XXXViewCell.h"
....

至于從model中獲取的數(shù)據(jù)不是view要顯示的數(shù)據(jù)應(yīng)該怎樣做數(shù)據(jù)的適配呢?這里就要使用到ViewModel,為避免文章過長,下一篇詳細(xì)說明如何在已有的big VC中增加VM來瘦身VC.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市近范,隨后出現(xiàn)的幾起案子嘶摊,更是在濱河造成了極大的恐慌,老刑警劉巖评矩,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叶堆,死亡現(xiàn)場離奇詭異,居然都是意外死亡斥杜,警方通過查閱死者的電腦和手機(jī)虱颗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蔗喂,“玉大人忘渔,你說我怎么就攤上這事$侄” “怎么了畦粮?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長返弹。 經(jīng)常有香客問我锈玉,道長,這世上最難降的妖魔是什么义起? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任拉背,我火速辦了婚禮,結(jié)果婚禮上默终,老公的妹妹穿的比我還像新娘椅棺。我一直安慰自己犁罩,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布两疚。 她就那樣靜靜地躺著床估,像睡著了一般。 火紅的嫁衣襯著肌膚如雪诱渤。 梳的紋絲不亂的頭發(fā)上丐巫,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天,我揣著相機(jī)與錄音勺美,去河邊找鬼递胧。 笑死,一個胖子當(dāng)著我的面吹牛赡茸,可吹牛的內(nèi)容都是我干的缎脾。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼占卧,長吁一口氣:“原來是場噩夢啊……” “哼遗菠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起华蜒,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤辙纬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后友多,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體牲平,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年域滥,在試婚紗的時候發(fā)現(xiàn)自己被綠了纵柿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡启绰,死狀恐怖昂儒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情委可,我是刑警寧澤渊跋,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站着倾,受9級特大地震影響拾酝,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜卡者,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一蒿囤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧崇决,春花似錦材诽、人聲如沸底挫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽建邓。三九已至,卻和暖如春睁枕,著一層夾襖步出監(jiān)牢的瞬間官边,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工外遇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拒逮,地道東北人。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓臀规,卻偏偏與公主長得像,于是被迫代替她去往敵國和親栅隐。 傳聞我的和親對象是個殘疾皇子塔嬉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評論 2 360

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