選擇風(fēng)格(Choosing a style)
我們將依照Google在《應(yīng)用架構(gòu)指南》中推薦的最佳實(shí)踐和架構(gòu)指南來(lái)構(gòu)建OrderNow的架構(gòu)。
這些定義包括通過(guò)各層定義組件的一些Clean Architecture原則。
層次的定義(Definition of the layers)
在應(yīng)用程序中,我們將定義以下主要層次:
? 用戶界面(UI)層
? 領(lǐng)域?qū)?/p>
? 數(shù)據(jù)層
UI層(UI Layer)
這一層組合了UI元素,Views視圖(composable functions可組合函數(shù)),ViewModels和表示層的實(shí)用程序,例如格式應(yīng)用器和動(dòng)畫(huà)。 設(shè)計(jì)這一層的注意事項(xiàng)包括:
? 對(duì)于狀態(tài)處理,遵循設(shè)計(jì)原則中描述的原則。
? 對(duì)于每個(gè)屏幕,將實(shí)現(xiàn)相應(yīng)的ViewModel。
?viewmodels也將作為狀態(tài)持有者,也就是狀態(tài)管理器。
?導(dǎo)航邏輯將委托給視圖,并將依賴于APP的狀態(tài)。
?副作用應(yīng)該報(bào)告給ViewModel。
?當(dāng)配置發(fā)生變化時(shí),Views模型應(yīng)該保持它們的狀態(tài)。
?鼓勵(lì)使用stateless Views(無(wú)狀態(tài)視圖)。
領(lǐng)域?qū)?Domain Layer)
盡管這一層可以是可選的,但我建議包含它,以保持與 Clean Architecture 規(guī)定的責(zé)任劃分一致的設(shè)計(jì)。
這一層組合了被稱為 UseCases 的組件,這些組件將管理業(yè)務(wù)邏輯和所有可由 ViewModels 重用的邏輯。
這一層還作為 UI 層(UI Layer)和數(shù)據(jù)層(Data Layer)之間的橋梁。
Models 類型的組件也屬于這一層。
這些組件對(duì)表示層或領(lǐng)域?qū)邮褂玫膶?shí)體或數(shù)據(jù)結(jié)構(gòu)進(jìn)行建模。例如,在 OrderNow 中,“產(chǎn)品”和“類別”都表示模型或?qū)嶓w。
UseCases (用例)是一種設(shè)計(jì)模式,用于定義特定的業(yè)務(wù)邏輯或應(yīng)用程序功能。它們用于封裝特定的應(yīng)用程序操作,通常涉及從數(shù)據(jù)層獲取數(shù)據(jù)、處理數(shù)據(jù)以及將結(jié)果傳遞給UI層。在使用清潔架構(gòu)時(shí),UseCases 通常在領(lǐng)域?qū)又卸x并由UI層調(diào)用。
?
關(guān)于這一層的設(shè)計(jì)考慮包括:
? 所有在視圖中重復(fù)的展示邏輯都可以放在UseCases (用例)中。
? 屬于此層的組件可以是無(wú)狀態(tài)的;它們是不需要臨時(shí)持久化的組件。
? UseCases (用例)執(zhí)行的操作必須是主線程安全的。
? UseCases 可以相互通信,以協(xié)調(diào)用例操作。 ? 每個(gè) UseCases 負(fù)責(zé)一個(gè)且只有一個(gè)操作。
? 每個(gè) UseCases 可能會(huì)使用一個(gè)或多個(gè)倉(cāng)庫(kù)(Repositories)。
數(shù)據(jù)層(Data Layer)
這一層組織了名為倉(cāng)庫(kù)(Repositories)的組件,它們協(xié)調(diào)和封裝了與本地和遠(yuǎn)程數(shù)據(jù)源的集成邏輯。如其名稱所示,它們遵循倉(cāng)庫(kù)模式。 這一層的其他組件包括數(shù)據(jù)源(Datasources)、映射器(Mappers)和數(shù)據(jù)傳輸對(duì)象(DTOs)。
? 數(shù)據(jù)源(Datasource):包含到外部或本地持久化源的邏輯集成。
? 數(shù)據(jù)傳輸對(duì)象(DTO):它是模型持久化實(shí)體的結(jié)構(gòu)。包含持久性機(jī)制使用的定義。為了使其他層(UI和領(lǐng)域)不繼承這些定義,這些類型的實(shí)體通過(guò)映射器轉(zhuǎn)換為應(yīng)用程序域的模型。
映射器:它們將 DTO 轉(zhuǎn)換為領(lǐng)域?qū)拥哪P蛯?shí)體。對(duì)于此層的設(shè)計(jì),建議考慮以下事項(xiàng):
? 此層可用作事實(shí)來(lái)源。
? 存儲(chǔ)庫(kù)執(zhí)行的操作必須是主安全的。
? 為每個(gè)主要實(shí)體類型定義一個(gè)存儲(chǔ)庫(kù),例如,產(chǎn)品存儲(chǔ)庫(kù)、類別存儲(chǔ)庫(kù)。
?通用架構(gòu)(General architecture)
不同集成層的通用圖類似如下:
Architecture Layers?架構(gòu)層 :
關(guān)于其他層
補(bǔ)充架構(gòu)主要層次的其他輔助層將包括:
? Main(主層):包含應(yīng)用程序的基礎(chǔ)構(gòu)件,例如 MainActivity、Application 和 ApplicationState 等等。
? Common(通用層):包含跨應(yīng)用程序的構(gòu)件,例如導(dǎo)航定義、用于其他層的實(shí)用工具和依賴管理器等等。?
關(guān)于 PortsClean 架構(gòu)的使用
建議在不同層的邊界之間包括端口,這種技術(shù)允許反轉(zhuǎn)控制,解耦在每層邊界之間通信的組件。這種方法將為設(shè)計(jì)增加更好的可維護(hù)性和適應(yīng)性。我們的示例應(yīng)用程序 (OrderNow) 將在Domain Layer 和Data layer之間添加端口。
?組織目錄(Organizing directories)
在我們的OrderNow示例中,為了簡(jiǎn)單起見(jiàn),層次將通過(guò)單個(gè)模塊中的目錄以單體方式組織。 我將把是否在后續(xù)的項(xiàng)目中決定分離各層并為每個(gè)層獻(xiàn)出一個(gè)模塊的決定留給讀者自行判斷。
通過(guò)兩個(gè)定義來(lái)進(jìn)行目錄組織:
? 在UI層,將使用按功能組織。
? 在Domain Layer(領(lǐng)域?qū)?和Data Layer(數(shù)據(jù)層),將使用按組件組織。
元素的命名和規(guī)范
對(duì)于組件命名,我們將使用以下規(guī)則:
使用后綴 只有在以下情況下才會(huì)在組件名中使用后綴:
? 包含包的名稱沒(méi)有推斷出其類型。
? 需要強(qiáng)制組件代表的結(jié)構(gòu)類型,例如,ProductRepository。
? 為了避免組件類型之間的混淆,例如,一個(gè)模型可能被命名為Category,其存儲(chǔ)庫(kù)名為 CategoryRepository。
后綴命名:
?
?命名包
應(yīng)用程序包的名稱必須為小寫(xiě),不能有分隔符,也不能有駝字。
命名組件
對(duì)于組件類型UseCases的名稱,表示用例中的操作(do, get, update, save, send, delete, add,執(zhí)行、獲取、更新、保存、發(fā)送、刪除、添加)的操作被用作前綴。
命名可組合函數(shù)?
?
?對(duì)于UI組件,也就是可組合函數(shù)的定義,我們將使用以下的命名規(guī)則,這些規(guī)則參考了Google在架構(gòu)指南中的文檔2?:
Screen:用于表示整個(gè)屏幕的可組合函數(shù)的后綴。?屏幕?
UI:用于composables,這些composables將視圖的狀態(tài)(UI State)與組件的圖形表示(UI Elements)結(jié)合在一起。??用戶界面
Elements:用于定義UI庫(kù)組件(Buttons, Layouts, Checkbox, TextFields ,如按鈕、布局、復(fù)選框、文本字段等)的composables的后綴,這些組件構(gòu)成了視圖。?元素
Preview:用于預(yù)覽視圖(元素)的composables的前綴。Screen和UI composables也可以被組合預(yù)覽,但由于對(duì)狀態(tài)和其他變量的依賴性,它變得更加復(fù)雜。
注意:
在構(gòu)建應(yīng)用程序時(shí),雖然定義所有的組件類型很重要,但也可能存在例外情況,不需要定義所有的組件類型,可以省略一些。具體取決于應(yīng)用程序中屏幕的復(fù)雜程度,需要決定哪些組件類型適用,哪些不適用。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-617615.html
本章中,我想描述在開(kāi)始實(shí)現(xiàn)之前要遵循的架構(gòu)定義。還澄清了用于組織應(yīng)用程序項(xiàng)目的規(guī)則。我必須澄清,本章中給出的定義是建議性的。讀者可以自定義或假定適合自己的約定和規(guī)則,或者在實(shí)現(xiàn)中感到舒適的約定和規(guī)則。在下一章中,我們將開(kāi)始實(shí)現(xiàn)OrderNow,首先要構(gòu)建的是它的框架,即它的主要結(jié)構(gòu)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-617615.html
到了這里,關(guān)于為Android構(gòu)建現(xiàn)代應(yīng)用——應(yīng)用架構(gòu)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!