關(guān)于 Android 架構(gòu)選擇的一點思考

架構(gòu)的選擇

在遇到需要實現(xiàn)一個完整的項目時,就不得不考慮該如何整理代碼結(jié)構(gòu)缰揪,規(guī)劃模塊分層砸王,模塊中間如何交互等等問題推盛。在一開始的時間,我會嘗試套用各種各樣的架構(gòu)谦铃,不過最近回眸的時候耘成,發(fā)現(xiàn)這種做法是錯誤的。天下架構(gòu)千萬種,適合你的卻不多凿跳。

思考的起點件豌,最好從不變這個角度來觸發(fā)。首先了解哪些是的控嗜,從這一點開始思考,將重心放在的部分上面骡显,這樣的架構(gòu)才是合理的疆栏。

我舉一個例子,一個運營型很強(qiáng)的產(chǎn)品惫谤,經(jīng)常開展各種活動壁顶,活動樣式各不相同,邏輯復(fù)雜溜歪。的地方若专,就在于靈活的活動上面。如果在客戶端上埋各種卡片樣式蝴猪,不僅會使得客戶端代碼復(fù)雜调衰,也無法滿足活動的動態(tài)能力。每當(dāng)上線一種新活動自阱,就需要更新客戶端版本嚎莉。反之,將的地方放置在服務(wù)端沛豌,客戶端只做展示趋箩,不再需要知曉業(yè)務(wù)細(xì)節(jié),這樣就會好很多加派〗腥罚客戶端提供基礎(chǔ)的展示能力,登錄芍锦、下載等等基礎(chǔ)操作竹勉,服務(wù)端通過雙方協(xié)定好的協(xié)議下發(fā)對應(yīng)的指令,就能靈活地展示卡片醉旦。

Android Clean 架構(gòu)

通常我們開發(fā)的APP饶米,變化最大的是業(yè)務(wù)需求。在這樣的產(chǎn)品上面车胡,每個迭代都有可能有新功能的加入檬输,老舊功能的修繕。

對于這種業(yè)務(wù)變化較為頻繁的應(yīng)用而言匈棘,就需要在客戶端本地做好基礎(chǔ)工作丧慈,架構(gòu)上要足夠通用,支持新業(yè)務(wù)加入。滿足這樣的架構(gòu)有很多逃默,這里比較推薦[Clean 架構(gòu)](https://github.com/android10/Android-CleanArchitecture)鹃愤。

關(guān)于 Clean 架構(gòu)的文章很多,我就不再這里具體展開了完域,大家有興趣的软吐,可以看以下的鏈接。

  1. 一種更清晰的Android架構(gòu)

  2. Architecting Android…The clean way?

在這里還是強(qiáng)調(diào)下吟税,變化的是新的業(yè)務(wù)需求和老舊業(yè)務(wù)的調(diào)整凹耙,因而需要在這里提供擴(kuò)展性十足,魯棒性高的架構(gòu)肠仪。

事件驅(qū)動架構(gòu)

并不是所有情況都能用上面的框架來實現(xiàn)肖抱。同樣我用例子來說明,我們做一個播放器异旧。播放器的邏輯是非常復(fù)雜的意述,需要考慮很多方面的事情,例如播放狀態(tài)吮蛹、用戶操作荤崇、網(wǎng)絡(luò)情況等等,如果我們正向思考匹涮,那這個代碼就很難寫了天试。

的是播放的各種狀態(tài),用戶操作等然低,而我們要做的就是去相應(yīng)這些變化喜每,而非正向地操作這些變化。這里的架構(gòu)最好采用事件驅(qū)動模型雳攘,在實現(xiàn)中維護(hù)一個狀態(tài)機(jī)带兜,我們所需要做的事情是切換狀態(tài),并相應(yīng)狀態(tài)變化吨灭,這樣寫起來就會有條理很多刚照。

例如播放的狀態(tài),有 Idle喧兄、Preparing无畔、Playing、Paused吠冤、Stopped 等等浑彰,UI界面上響應(yīng)相應(yīng)的狀態(tài)并做出變化,例如播放按鈕在接受到 Paused -> Playing 的狀態(tài)變化后拯辙,將按鈕由播放變?yōu)?code>暫停郭变。

One Model

這種模式一般適用于非常靈活的情形颜价,例如我前面提及的第一個例子,在這種架構(gòu)下诉濒,客戶端作為展示平臺周伦,并不參與業(yè)務(wù)邏輯。這種架構(gòu)有很多種實現(xiàn)方式未荒,簡單的方式有 webview专挪,高階一點的有各種 Web Native Framework。

但在這里介紹另一種方式片排,純粹的 Native 方式狈蚤。客戶端自身作為一個渲染平臺划纽,指定自身可以支持的組件(Cards, Button, TextView etc.),和相應(yīng)支持的功能(Download, Jump to Web, Open File etc.)锌畸∮铝樱客戶端此時與服務(wù)端定義好協(xié)議,當(dāng)服務(wù)器端根據(jù)協(xié)議下發(fā)指令時潭枣,客戶端需要解析它們比默,并展示相應(yīng)的組件,綁定上對應(yīng)的操作盆犁,這樣下來命咐,客戶端就成了一定程度上的瀏覽器了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谐岁,一起剝皮案震驚了整個濱河市醋奠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌伊佃,老刑警劉巖窜司,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異航揉,居然都是意外死亡塞祈,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進(jìn)店門帅涂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來议薪,“玉大人,你說我怎么就攤上這事媳友∷挂椋” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵庆锦,是天一觀的道長捅位。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么艇搀? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任尿扯,我火速辦了婚禮,結(jié)果婚禮上焰雕,老公的妹妹穿的比我還像新娘衷笋。我一直安慰自己,他們只是感情好矩屁,可當(dāng)我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布辟宗。 她就那樣靜靜地躺著,像睡著了一般吝秕。 火紅的嫁衣襯著肌膚如雪泊脐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天烁峭,我揣著相機(jī)與錄音容客,去河邊找鬼。 笑死约郁,一個胖子當(dāng)著我的面吹牛缩挑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鬓梅,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼供置,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了绽快?” 一聲冷哼從身側(cè)響起芥丧,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谎僻,沒想到半個月后娄柳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡艘绍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年赤拒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诱鞠。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡挎挖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出航夺,到底是詐尸還是另有隱情蕉朵,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布阳掐,位于F島的核電站始衅,受9級特大地震影響冷蚂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜汛闸,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一蝙茶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧诸老,春花似錦隆夯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至厘肮,卻和暖如春愧口,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背类茂。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工调卑, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人大咱。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像注益,于是被迫代替她去往敵國和親碴巾。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,629評論 2 354

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

  • 原文出處:http://www.apkbus.com/blog-875309-62984.html 前言架構(gòu)設(shè)計丑搔,...
    zzj丶閱讀 1,598評論 1 24
  • 東西有點多厦瓢,但是資源絕對nice,自己都全部親身體驗過了啤月,大家可放心使用 github排名: https://gi...
    Rance935閱讀 11,210評論 26 312
  • 自己總結(jié)的Android開源項目及庫煮仇。 github排名https://github.com/trending,g...
    passiontim閱讀 2,538評論 1 26
  • 一、生命周期 一個事物一旦出生谎仲,就必然會長大浙垫,變異,一旦長大郑诺,就面臨著衰老夹姥,接下來就是消亡了,這個過程就稱為一個事...
    ZyBlog閱讀 2,662評論 1 11
  • 一辙诞、簡歷準(zhǔn)備 1辙售、個人技能 (1)自定義控件、UI設(shè)計飞涂、常用動畫特效 自定義控件 ①為什么要自定義控件旦部? Andr...
    lucas777閱讀 5,202評論 2 54