軟件架構(gòu)第一篇:項(xiàng)目分層

開(kāi)發(fā)一個(gè)項(xiàng)目图云,軟件架構(gòu)是第一步惯悠,而我認(rèn)為項(xiàng)目的分層是軟件架構(gòu)中重要的一步。

項(xiàng)目分層是指代碼的組織方式竣况,說(shuō)的直白點(diǎn)就是如何去組織文件和文件夾克婶,好的項(xiàng)目分層使項(xiàng)目具有很好的可讀性和擴(kuò)展性。

一般說(shuō)來(lái)丹泉,項(xiàng)目的分層分為兩種:按類(lèi)別和按功能鸠补。

一、項(xiàng)目分層方式

1. 按類(lèi)別

在 Android 開(kāi)發(fā)早期嘀掸,很多項(xiàng)目都是按照類(lèi)別分層的紫岩,就是按照 activity、fragment睬塌、adapter 等來(lái)進(jìn)行分層泉蝌,按照類(lèi)別進(jìn)行分層的項(xiàng)目的目錄結(jié)構(gòu)大概是下面這種:

按類(lèi)別分層項(xiàng)目的目錄結(jié)構(gòu)

相信大家對(duì)這種結(jié)構(gòu)非常熟悉,這種分層方式的好處是:

  1. 簡(jiǎn)單明了揩晴,很容易知道每個(gè)子包下存放的是什么勋陪。
  2. 一旦項(xiàng)目采用這種分層方式,將來(lái)項(xiàng)目無(wú)論怎么迭代和變化硫兰,目錄結(jié)構(gòu)都不需要做太大的改動(dòng)诅愚。

但這種方式缺點(diǎn)也是很明顯的,如果項(xiàng)目太大劫映,有上百個(gè)界面违孝,那么在 activity 子包下會(huì)有上百個(gè)類(lèi),那樣要定位到具體某個(gè)功能模塊的 activity 會(huì)變得很困難泳赋,也就是說(shuō)這種方式不夠精細(xì)雌桑,隨著項(xiàng)目迭代功能越來(lái)越多,會(huì)導(dǎo)致代碼導(dǎo)航越來(lái)越困難祖今。

2. 按功能

這種分包方式是按照模塊劃分的校坑,同一功能模塊相關(guān)的類(lèi)都在一個(gè)文件夾下,項(xiàng)目的目錄結(jié)構(gòu)大概如下:

按功能分層項(xiàng)目的目錄結(jié)構(gòu)

以上的分層可以看到有一個(gè)叫feature的包千诬,這里面包含了 app 的一些功能耍目,如 freshnews、login分別代表 app 內(nèi)部的新鮮事徐绑、登錄等一些功能模塊邪驮,這種按功能模塊的分層好處很明顯:

  1. 很直觀,可以很方便的根據(jù) app 的功能模塊定位到具體的代碼泵三。
  2. 擴(kuò)展性良好耕捞,如果想在此基礎(chǔ)上再按照 MVC、MVP的模式去進(jìn)一步分層烫幕,或者想在此基礎(chǔ)上再按照類(lèi)別去分層俺抽,依然可以,只需要 feature 包下某個(gè)具體的功能下面再加一層就好了较曼。
  3. 高度的模塊化磷斧,也就是所謂的“高內(nèi)聚”。隨著 app 的迭代捷犹,如果 app 過(guò)于龐大弛饭,想要實(shí)現(xiàn)插件化、組件化萍歉,這種分層模式可以省不少事侣颂。

但是這種方式也有一些缺點(diǎn),比如有些項(xiàng)目初期功能一直在變化枪孩,如果按照功能木塊劃分憔晒,會(huì)導(dǎo)致項(xiàng)目結(jié)構(gòu)一直在變化荣病。另一方面掏秩,如果項(xiàng)目很小,本身就沒(méi)多少界面印荔,按照這么分層感覺(jué)顆粒度太細(xì)攻询,有點(diǎn)大材小用的感覺(jué)从撼。
綜合以上分析,使用場(chǎng)景如下:

  1. 對(duì)于小型項(xiàng)目钧栖,推薦按照第一種分層方式低零。
  2. 對(duì)于大中型項(xiàng)目,推薦按照第二種分層方式拯杠。
    當(dāng)然毁兆,這只是我自己一些想法,具體在項(xiàng)目中可以自己決定阴挣。隨著項(xiàng)目的龐大气堕,會(huì)導(dǎo)致按照功能分層的每個(gè)目錄下也會(huì)有很多文件,不易于定位功能代碼畔咧,這種情況可以按照功能+類(lèi)別的方式進(jìn)行分層茎芭,看起來(lái)像這樣:
按功能+類(lèi)別結(jié)合分層項(xiàng)目的目錄結(jié)構(gòu)

二、軟件架構(gòu)方式和項(xiàng)目分層的關(guān)系

現(xiàn)在流行的軟件架構(gòu)方式誓沸,比如 MVC梅桩、MVP、MVVM等拜隧,這些是軟件架構(gòu)方式宿百,和項(xiàng)目分層是兩個(gè)維度的概念趁仙。

項(xiàng)目分層是指如何去組織文件夾和文件,而軟件架構(gòu)是指類(lèi)職責(zé)的劃分垦页、類(lèi)之間的通信方式雀费、類(lèi)的依賴(lài)關(guān)系以及數(shù)據(jù)在類(lèi)之間的流轉(zhuǎn)等。
如果你采用MVP模式痊焊,如果按照類(lèi)別進(jìn)行分層盏袄,項(xiàng)目結(jié)構(gòu)看起來(lái)可能是如下這樣:

MVP按照類(lèi)別分層

而如果按照功能分包的方式,結(jié)構(gòu)可能是這樣:

MVP按照功能分層

三薄啥、小結(jié)

以上就是關(guān)于項(xiàng)目分層的兩種形式以及使用場(chǎng)景辕羽,值得強(qiáng)調(diào)的是,這種分層方式不是標(biāo)準(zhǔn)和固定的垄惧,完全可以結(jié)合實(shí)際場(chǎng)景進(jìn)行選擇和變通刁愿。對(duì)項(xiàng)目進(jìn)行分層是整個(gè)架構(gòu)的一部分,但項(xiàng)目架構(gòu)遠(yuǎn)不止于此到逊,接下來(lái)的文章會(huì)介紹架構(gòu)相關(guān)的知識(shí)酌毡,以及目前Android開(kāi)發(fā)領(lǐng)域比較流行的一些軟件架構(gòu)模式,比如 MVC蕾管、MVP枷踏、MVVM和Clean。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末掰曾,一起剝皮案震驚了整個(gè)濱河市旭蠕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌旷坦,老刑警劉巖掏熬,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異秒梅,居然都是意外死亡旗芬,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)捆蜀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)疮丛,“玉大人,你說(shuō)我怎么就攤上這事辆它√鼙。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵锰茉,是天一觀的道長(zhǎng)呢蔫。 經(jīng)常有香客問(wèn)我,道長(zhǎng)飒筑,這世上最難降的妖魔是什么片吊? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任绽昏,我火速辦了婚禮,結(jié)果婚禮上俏脊,老公的妹妹穿的比我還像新娘全谤。我一直安慰自己,他們只是感情好联予,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布啼县。 她就那樣靜靜地躺著材原,像睡著了一般沸久。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上余蟹,一...
    開(kāi)封第一講書(shū)人閱讀 51,604評(píng)論 1 305
  • 那天卷胯,我揣著相機(jī)與錄音,去河邊找鬼威酒。 笑死窑睁,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的葵孤。 我是一名探鬼主播担钮,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼尤仍!你這毒婦竟也來(lái)了箫津?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤宰啦,失蹤者是張志新(化名)和其女友劉穎苏遥,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體赡模,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡田炭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了漓柑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片教硫。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖辆布,靈堂內(nèi)的尸體忽然破棺而出栋豫,到底是詐尸還是另有隱情,我是刑警寧澤谚殊,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布丧鸯,位于F島的核電站,受9級(jí)特大地震影響嫩絮,放射性物質(zhì)發(fā)生泄漏丛肢。R本人自食惡果不足惜围肥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蜂怎。 院中可真熱鬧穆刻,春花似錦、人聲如沸杠步。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)幽歼。三九已至朵锣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間甸私,已是汗流浹背诚些。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留皇型,地道東北人诬烹。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像弃鸦,于是被迫代替她去往敵國(guó)和親绞吁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,154評(píng)論 25 707
  • 軟件架構(gòu) 對(duì)于許多開(kāi)發(fā)者而言唬格,在適當(dāng)?shù)牡胤經(jīng)]有正式的架構(gòu)就開(kāi)始敲代碼是一件極為普通的事情家破。為什么要有架構(gòu)呢? 為什...
    Marc_Steven閱讀 259評(píng)論 0 0
  • 擁有這本書(shū)已經(jīng)有四年了西轩,對(duì)于自然教育是很喜歡的员舵。這幾年放假也是選擇帶孩子在大自然中渡過(guò)。記得第一次聽(tīng)到這本書(shū)講座之...
    蜂蜜辣椒汁閱讀 201評(píng)論 0 0
  • 工作也已許久藕畔。渾渾噩噩马僻,一方面工作上的能力得以提升,可當(dāng)?shù)玫绞裁吹臅r(shí)候也許正失去著什么注服。 也許是昨天韭邓,也許是更早的...
    txqdx閱讀 230評(píng)論 0 0
  • 不知道從什么時(shí)候,娛樂(lè)圈開(kāi)始流行親子的綜藝節(jié)目了溶弟。最近有一個(gè)熱播的綜藝節(jié)目女淑,《媽媽是超人》的第二季。在比較之下辜御,有...
    趙一桃不姓趙閱讀 351評(píng)論 0 0