原文地址:10 things every Android app developer should know about Architecture
在面向?qū)ο蟮睦砟钪校瑔蝹€應(yīng)用程序的體系結(jié)構(gòu)可以簡單地描述為系統(tǒng)中類的放置在什么位置以及它們?nèi)绾瓮ㄐ判奥搿N覀冊趯@些類分組時文狱,描述了這些類的角色和職責(zé)牵舱。
下面列舉了可以幫我們理解架構(gòu)的內(nèi)容:
架構(gòu)是與語言和平臺無關(guān)的。架構(gòu)是基于編程的基本原則。這些編程的基本原則(SOLID原則或者設(shè)計模式)是穩(wěn)定的,且這些知識可以跨語言和平臺使用辛蚊。投入時間學(xué)習(xí)架構(gòu)可以獲得豐厚的回報。它不僅有助于我們設(shè)計更好的架構(gòu)真仲,還可以提高我們的編碼技能袋马。
-
關(guān)于MVP/MVVM的困惑。MVP(Model-View-Presenter)或者MVVM(Model-View-ViewModel)的職責(zé)是從代碼中分離UI秸应。我們使用Presenter或者ViewModel從View(Activity/Fragment)中抽取邏輯相關(guān)代碼虑凛。這一過程涉及到VP或者VVM模塊碑宴,而剩下的Model模塊用于向Presenter或者ViewModel提供數(shù)據(jù)。
我通成5看到的是Presenter和ViewModel是通過接口和觀察者實現(xiàn)的延柠,但除此之外,它是混亂的锣披。我認為這可以歸咎于將VP / VVM用于應(yīng)用程序的整個架構(gòu)而不是努力塑造模型(M)捕仔。MVP / MVVM作為架構(gòu)模式起著至關(guān)重要的作用,但應(yīng)用程序的架構(gòu)不僅僅是將UI分離盈罐。
-
架構(gòu)是重要的,但不是不可或缺:學(xué)習(xí)架構(gòu)是Android應(yīng)用程序開發(fā)人員發(fā)展的后期階段闪唆。其中一個原因是盅粪,即使沒有架構(gòu),我們也能開發(fā)出在功能上出類拔萃應(yīng)用程序悄蕾,為什么要花費額外的時間票顾?我們?nèi)绾握f服我們的老板/客戶,我們花費的額外時間可能沒有任何直接的好處帆调?
只有在幾個版本之后奠骄,我們才意識到我們所處的混亂,但現(xiàn)在已經(jīng)太晚了番刊。當(dāng)我們一次又一次陷入困境時含鳞,我們開始了解架構(gòu)的必要性。
-
架構(gòu)提高可擴展性:如果只有一個版本可以發(fā)布應(yīng)用程序芹务,那么架構(gòu)并不重要蝉绷。事實上,這是我們許多人在開發(fā)應(yīng)用程序時采取的方法枣抱,這是短視的熔吗。如果我必須指出擁有適當(dāng)?shù)募軜?gòu)的最大好處,那就是易于修改及其有效性佳晶。
確實桅狠,我們無法預(yù)見應(yīng)用程序未來可能成為的一切,但良好的架構(gòu)有足夠的靈活性來適應(yīng)未來未知的變化轿秧。
-
架構(gòu)不需要要學(xué)習(xí)專門的知識:對于一個優(yōu)秀的程序員來說中跌,設(shè)計架構(gòu)很自然。這一點與上面第一條是重復(fù)的淤刃。但是它很重要晒他,因此,需要重新聲明一遍逸贾。
Dagger/RxJava 或者其他工具需要我們學(xué)習(xí)和他們相關(guān)的知識陨仅。在架構(gòu)的情況下津滞,它只是編程原則和指南。我們在編碼方面變得越優(yōu)秀灼伤,我們越能夠更好地可視化應(yīng)用程序的體系結(jié)構(gòu)触徐。
架構(gòu)需要不斷的實踐和耐心:架構(gòu)就像一顆果樹,我們不能指望它一天就能結(jié)出果實狐赡。設(shè)計架構(gòu)需要時間和精力撞鹉,而且這是一個持續(xù)的過程。應(yīng)用程序中的每個更改都需要在實施之前做出深思熟慮的決定颖侄。
當(dāng)我們開始采用快捷方式時鸟雏,主要的損害來自應(yīng)用程序架構(gòu)。我們對自己做出的承諾(以后清理代碼)只會被一次又一次地打破览祖。
我們需要了解我們正在進行的工作孝鹊,否則這將是一個很好的開始,只會在以后失敗展蒂。架構(gòu)是我們對應(yīng)用程序的終身承諾又活。谷歌架構(gòu)組件:在2017年,谷歌引入架構(gòu)組件锰悼。架構(gòu)組件不僅僅是為了將混亂從Activity / Fragment轉(zhuǎn)移到ViewModel柳骄。這些“架構(gòu)”組件可以幫助我們設(shè)計應(yīng)用程序的架構(gòu)。這些組件使得實現(xiàn)架構(gòu)變得容易箕般,否則這將是一項艱巨的任務(wù)耐薯。例如,LiveData可以輕松觀察數(shù)據(jù)中的變化隘世,這些變化過于尊重Activity / Fragment的生命周期可柿。人們可能會發(fā)現(xiàn)ViewModel是一種在配置更改中幸存下來的方法,但其真正的含義是幫助我們將UI與邏輯分開丙者。
我們不必所有人都稱為軟件架構(gòu)師:每一個軟件架構(gòu)師都是一個軟件開發(fā)者复斥,但并不是每一個軟件開發(fā)者都是一個軟件架構(gòu)師。在大型項目中械媒,會有指定的軟件架構(gòu)師目锭。對于他們來說,理解各種架構(gòu)模式以及其工作原理是至關(guān)重要的纷捞。
作為開發(fā)人員痢虹,理解架構(gòu)有助于理解我們所實現(xiàn)的抽象。如果我們是自由職業(yè)者或資源有限的初創(chuàng)公司工作主儡,這就變得更加重要奖唯。在這種情況下,擁有軟件架構(gòu)的基本知識就足夠了糜值。
我們可以采用許多簡單的模式和原則來為我們的應(yīng)用程序創(chuàng)建一個較好的架構(gòu)丰捷,而不需要深入到架構(gòu)世界坯墨。架構(gòu)的好處:如前所述,其中一個優(yōu)點是可擴展性病往。如果組件被正確劃分并以有組織的方式進行通信捣染,則添加新功能和修改代碼非常容易快捷。這種分離帶來了許多其他優(yōu)點停巷,例如可測試性耍攘,我們可以輕松地單獨測試組件。
-
從哪里開始畔勤?架構(gòu)無處不在蕾各。嵌入式系統(tǒng),web應(yīng)用庆揪,企業(yè)軟件示损,移動APP等等。每種軟件都需要不同的架構(gòu)嚷硫。除非我們想成為軟件架構(gòu)師,否則我們必須選擇我們的開始始鱼。
理解架構(gòu)和實現(xiàn)的參考書目為:Robert C. Martin的Clean Architecture 和Eric Evans的 Domain-Driven Design: Tackling Complexity in the Heart of Software
谷歌提供了APP架構(gòu)指南仔掸。一旦掌握了,您可能希望實現(xiàn)Clean Architecture引導(dǎo)的分層架構(gòu)模式医清。這種方法很簡單起暮,適合大多數(shù)應(yīng)用程序。我按照這些原則創(chuàng)建了一個示例應(yīng)用程序会烙。示例的代碼在這里