設(shè)計(jì)思路的一些總結(jié)

本文用于記錄一些零碎的設(shè)計(jì)思路。不定時(shí)更新中......

1.庫(kù)的傳參

封裝庫(kù)即封裝第三方,當(dāng)需要讓外界定制時(shí)(類似頁(yè)面的跳轉(zhuǎn)傳參惜姐,只是項(xiàng)目中頁(yè)面的跳轉(zhuǎn)一般參數(shù)不多)牧抵,主要有以下幾種方式:

① 參數(shù)直接傳入

參數(shù)直接傳入適用于大部分場(chǎng)景,不過(guò)參數(shù)多了也顯得繁瑣运嗜,所以可能會(huì)通過(guò)分成多個(gè)Config模型類傳入晕城。參數(shù)傳參的時(shí)機(jī)也是即時(shí)的催植。
參數(shù)可能通過(guò)屬性叠纷,也可能通過(guò)函數(shù)參數(shù)刻帚,在Swift中,函數(shù)參數(shù)提供的擴(kuò)展性很強(qiáng)涩嚣,你可以通過(guò)枚舉數(shù)組[options]達(dá)到自定義的效果崇众。

② 通過(guò)協(xié)議數(shù)據(jù)源傳入

參數(shù)傳入是即時(shí)的,通過(guò)數(shù)據(jù)源是在必要的時(shí)候從外界獲取航厚。這個(gè)的好處是可以再適當(dāng)?shù)臅r(shí)機(jī)去處理需要的數(shù)據(jù)傳入顷歌。同時(shí)作為一個(gè)封裝庫(kù),也是需要通過(guò)代理回調(diào)給外界幔睬,這邊不贊同使用閉包(代碼塊)眯漩。
協(xié)議可以作為數(shù)據(jù)源和代理的橋梁,在適當(dāng)時(shí)機(jī)獲取需要的參數(shù)溪窒,在多個(gè)時(shí)機(jī)獲取對(duì)應(yīng)回調(diào)坤塞。

③ 通過(guò)模型類傳入

模型類傳入,有點(diǎn)參數(shù)傳入的意思澈蚌,這邊的模型類不僅僅是我們常見(jiàn)的Model,也比如Moya中的Target灼狰、CTNetworking中的BaseManager宛瞄,將特異性的參數(shù)封在內(nèi)部。

2.協(xié)議的使用

在OC中交胚,協(xié)議似乎和代理綁在一起份汗,其實(shí)不然。無(wú)論在OC還是Swift中蝴簇,協(xié)議的用處都是很大的:

① 代理回調(diào)和數(shù)據(jù)源

UITableView是最典型的例子杯活,TableView在適當(dāng)時(shí)機(jī)從ViewController獲取需要的參數(shù),在多個(gè)時(shí)機(jī)回調(diào)給ViewController熬词,讓它去做事情旁钧。
(比如在我們不想把數(shù)據(jù)帶過(guò)去處理或者數(shù)據(jù)帶來(lái)帶去,就可以在原本界面處理給下一個(gè)界面互拾。)

② 約束類

這邊有兩種場(chǎng)景:

  • 一個(gè)是約束函數(shù)的參數(shù)歪今,只能傳入符合該協(xié)議的對(duì)象,比如在設(shè)置代理的時(shí)候颜矿。
  • 一個(gè)是約束類的方法寄猩,在AFNetWorking中,AFURLRequestSerialization是一個(gè)協(xié)議骑疆,規(guī)范類的主要功能田篇。無(wú)論是AFHTTPRequestSerializer還是它的子類AFJSONRequestSerializer替废,都會(huì)去實(shí)現(xiàn)這個(gè)功能。
@interface AFHTTPRequestSerializer : NSObject <AFURLRequestSerialization>

@interface AFJSONRequestSerializer : AFHTTPRequestSerializer

在Swift中泊柬,這種規(guī)范就更加常見(jiàn)了舶担,比如Moya的Target協(xié)議規(guī)范了作為一個(gè)Request模型類該實(shí)現(xiàn)的功能。

另外彬呻,多層回調(diào)傳遞(比如cell中的view代理要傳遞方法至cell所在的vc)可以通過(guò)兩層Delegate(ViewDelegate衣陶,CellDelegate(繼承于ViewDelegate))。

3.區(qū)分類的職責(zé)

封裝一個(gè)庫(kù)闸氮,除了考慮怎么傳參和回調(diào)剪况,更重要的是庫(kù)的設(shè)計(jì)。庫(kù)的設(shè)計(jì)簡(jiǎn)單說(shuō)就是分成幾個(gè)類蒲跨?每個(gè)類擔(dān)任什么職責(zé)译断?每個(gè)類的關(guān)系是怎么樣?
在CTNetworking的設(shè)計(jì)中或悲,簡(jiǎn)單的請(qǐng)求集合著不同的扮演者孙咪,有的負(fù)責(zé)提供數(shù)據(jù)(數(shù)據(jù)源),有的負(fù)責(zé)校驗(yàn)(檢驗(yàn)者)巡语,有的負(fù)責(zé)回調(diào)(回調(diào)者)翎蹈,有的負(fù)責(zé)處理數(shù)據(jù)(適配器)。

4.ViewController繼承的使用

ViewController的繼承要分離好子類和父類各自的職責(zé)男公。
比如ImagePickerPreviewViewController(大圖瀏覽界面)的父類用于封裝ImagePreviewView的手勢(shì)操作和動(dòng)畫(huà)荤堪。ImagePickerPreviewViewController自身用于添加外表的ToolBar,處理數(shù)據(jù)枢赔,處理代理方法澄阳。

當(dāng)然使用繼承有3大要點(diǎn):
1.父類只是給子類提供服務(wù),并不涉及子類的業(yè)務(wù)邏輯踏拜。
2.層級(jí)關(guān)系明顯碎赢,功能劃分清晰,父類和子類各做各的速梗。
3.父類的所有變化肮塞,都需要在子類中體現(xiàn),也就是說(shuō)此時(shí)耦合已經(jīng)成為需求镀琉。
其他情況下優(yōu)先考慮組合峦嗤。

5.配置類的設(shè)計(jì)

配置類(比如Config)大多數(shù)也是當(dāng)作參數(shù)注入我們的項(xiàng)目模塊,實(shí)現(xiàn)自定義設(shè)置的屋摔。
在UICollectionView中烁设,Layout類本身也是類似配置類(通過(guò)協(xié)議限定我們實(shí)現(xiàn)的方法),負(fù)責(zé)提供布局所需要的信息。簡(jiǎn)單理解就是装黑,我需要這些配置信息副瀑,你實(shí)現(xiàn)給我。
一個(gè)好的龐大的配置類恋谭,需要將配置做分割糠睡,將對(duì)應(yīng)小模塊的配置分配到各自的小配置中。比如網(wǎng)易云信的NIMKitConfig這個(gè)類就設(shè)計(jì)得不錯(cuò)疚颊,多而不雜狈孔。

6.相似界面的設(shè)計(jì)

相似界面的設(shè)計(jì)主要有兩種思路,一種是繼承材义,一種是配置均抽。當(dāng)然混合起來(lái)也是可以的。
繼承主要應(yīng)用于兩個(gè)界面的控件有遞進(jìn)的關(guān)系其掂∮突樱基類搭建基礎(chǔ)控件,子類添加個(gè)性化的控件款熬。
配置主要用于兩個(gè)界面比較相似深寥,界面控件、控件布局或界面參數(shù)通過(guò)配置類的方法來(lái)決定贤牛。

7.聊天界面的設(shè)計(jì)

聊天界面要想實(shí)現(xiàn)自定義惋鹅,解耦,首先有UI層面和數(shù)據(jù)層面的區(qū)分盔夜。UI層面當(dāng)然在ViewController去實(shí)現(xiàn)负饲,自定義的內(nèi)容可以通過(guò)配置類來(lái)提供,不同的配置類決定這個(gè)界面的一些不同之處喂链。比如聊天界面的背景圖,icon妥泉,或者聊天菜單選項(xiàng)椭微,轉(zhuǎn)發(fā)菜單選項(xiàng),當(dāng)然還有最重要的數(shù)據(jù)提供者(主要負(fù)責(zé)提供下拉請(qǐng)求聊天數(shù)據(jù))盲链。不同的數(shù)據(jù)提供者提供的數(shù)據(jù)也是不一樣的蝇率,很明顯的數(shù)據(jù)和UI做了解耦。

8.聊天Cell的設(shè)計(jì)(相似Cell的設(shè)計(jì))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末刽沾,一起剝皮案震驚了整個(gè)濱河市本慕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌侧漓,老刑警劉巖锅尘,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異布蔗,居然都是意外死亡藤违,警方通過(guò)查閱死者的電腦和手機(jī)浪腐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)顿乒,“玉大人议街,你說(shuō)我怎么就攤上這事¤甸” “怎么了特漩?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)骨杂。 經(jīng)常有香客問(wèn)我涂身,道長(zhǎng),這世上最難降的妖魔是什么腊脱? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任访得,我火速辦了婚禮,結(jié)果婚禮上陕凹,老公的妹妹穿的比我還像新娘悍抑。我一直安慰自己,他們只是感情好杜耙,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布搜骡。 她就那樣靜靜地躺著,像睡著了一般佑女。 火紅的嫁衣襯著肌膚如雪记靡。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,365評(píng)論 1 302
  • 那天团驱,我揣著相機(jī)與錄音摸吠,去河邊找鬼。 笑死嚎花,一個(gè)胖子當(dāng)著我的面吹牛寸痢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播紊选,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼啼止,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了兵罢?” 一聲冷哼從身側(cè)響起献烦,我...
    開(kāi)封第一講書(shū)人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎卖词,沒(méi)想到半個(gè)月后巩那,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年拢操,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了锦亦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡令境,死狀恐怖杠园,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情舔庶,我是刑警寧澤抛蚁,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站惕橙,受9級(jí)特大地震影響瞧甩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜弥鹦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一肚逸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧彬坏,春花似錦朦促、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至幻赚,卻和暖如春禀忆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背落恼。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工箩退, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人佳谦。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓乏德,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親吠昭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354