clean 架構(gòu)是一種"分層架構(gòu)"认烁,源代碼依賴只能由外部指向內(nèi)部肿男,內(nèi)部圈子里人是不知道外部圈子的任何東西的。
特別是聲明在外部圈子中的類却嗡、函數(shù)舶沛、變量或者其他軟件實(shí)體。
Entities: 表示具體的業(yè)務(wù)規(guī)則
Use Cases: 該層包含應(yīng)用程序特定的業(yè)務(wù)規(guī)則窗价,它封裝并實(shí)現(xiàn)了系統(tǒng)的所有用例如庭。這些用例
決定著實(shí)體中數(shù)據(jù)的流動(dòng)。 這一層的變動(dòng)不應(yīng)該影響到實(shí)體撼港,同時(shí)也不應(yīng)該受到外層的影響坪它。
Presenters: 在這一層骤竹,數(shù)據(jù)從對(duì)實(shí)體和用例最方便的形式轉(zhuǎn)換為方便外部 UI 的格式。我們通常
使用 MVC 往毡、MVP蒙揣、MVVM 等 UI 框架。
在 Android 中應(yīng)用
為保持業(yè)務(wù)規(guī)則對(duì)外部世界一無所知來實(shí)現(xiàn)關(guān)注點(diǎn)分離开瞭,以便在不依賴與外部元素的情況下進(jìn)行測(cè)試懒震,
建議將項(xiàng)目分為 3 個(gè)不同的層次,每次層次都有自己的目的嗤详,與其他層分開工作个扰。每個(gè)層都使用自己的
數(shù)據(jù)模型,因此可以實(shí)現(xiàn)這種獨(dú)立性葱色。
Presentation Layer
進(jìn)行業(yè)務(wù)視圖的渲染递宅,View 與 動(dòng)畫在這里進(jìn)行交互《玻可以使用 MVP 或 MVVM 來實(shí)現(xiàn)
Domain Layer
所有的業(yè)務(wù)邏輯發(fā)生在這一層恐锣,所有的交互(用例)在這里進(jìn)行實(shí)現(xiàn)。該層是一個(gè)純 Java 模塊舞痰,將不依賴
任何 android 的東西土榴。
Data Layer
應(yīng)用程序所需要的數(shù)據(jù)全部來自這一層,比方說通過 id 從網(wǎng)絡(luò)獲取用戶的信息响牛。
優(yōu)點(diǎn):
- Independent of Frameworks. 獨(dú)立于框架
- Testable. 可測(cè)試的
- Independent of UI. 獨(dú)立于用戶界面
- Independent of Database. 獨(dú)立于數(shù)據(jù)庫
- Independent of any external agency. 獨(dú)立于任何外部機(jī)構(gòu)