如何結合整潔架構和MVP模式提升前端開發(fā)體驗(一) - 整體架構篇

如果你無法接受 TypeScript,不建議繼續(xù)閱讀此系列文章

本文不詳細介紹什么是整潔架構以及 MVP 模式,自行查看文章結尾相關鏈接文章。

整潔架構粗略介紹

下圖為整潔架構最原始的結構圖:


  1. Entities/Models:實體層,官方說法就是封裝了企業(yè)里最通用的一部分邏輯,也可以叫 Models, 可能是只包含數(shù)據(jù)字段的對象,也可能包含方法,具有一部分業(yè)務邏輯。更加深入就是領域驅動(DDD)開發(fā)相關的內容。
  2. Use Case/Service:包含核心業(yè)務邏輯。
  3. Interface Adapter:適配層/膠水層,負責內圈的 entity 和 use case 同外圈的 external interfaces 之間的數(shù)據(jù)轉化。需要把外層服務的數(shù)據(jù)轉化成內層 entity 和 usecase 可以消費的數(shù)據(jù),反之亦然。
  4. External Interfaces:依賴的外部服務,第三方框架,以及需要糊的頁面 UI 都歸屬在這一層,這一層完全不感知內圈的任何邏輯,所以無論這一層怎么變( 組件庫由 Element UI 改為 Ant Design Vue ,數(shù)據(jù)庫由 MySQL 改為 PostgreSQL ),都不應該影響到內圈。

這不就是后端的 mvc 嗎?

好處

  1. 更好的做單元測試:業(yè)務邏輯可以在沒有 UI、數(shù)據(jù)庫、Web 服務器或任何其他外部基礎設施的情況下被測試。
  2. 減少對UI框架的依賴:跨端開發(fā),業(yè)務邏輯層可以直接復用,只需要做 UI 層的適配。
  3. 基礎設施無關性:內層業(yè)務邏輯不需要關心數(shù)據(jù)來自哪里,提交到哪里,比如 LocalStroage、IndexedDB、Web SQL、JSbridge、HTTP、WebSocket。

轉化為適用于前端工程的結構

Service,Model 都為純 JS 類/對象,與框架無關。

基礎服務虛線表示并不是直接調用相應的 API,而是封裝在工具庫或者函數(shù)中。

如何真正的落地?

presenter/controller 創(chuàng)建 model,service 實例,并且將 model 注入 service 中。service 中使用 model 做業(yè)務邏輯計算。同時 presenter/controller 內調用 service 方法處理 view 事件,同時將 model 返回到 view 層中做數(shù)據(jù)綁定

問題:model 是純 JS 對象,如何讓 model 數(shù)據(jù)變更的時候觸發(fā) view 的更新?

mobx,@formily/reactive 將 model 變成響應式的;造輪子 - 發(fā)布訂閱模式

如何在實際項目中落地

使用 vue composition api 或者 react hooks 構建 model,所以 model 就是一個自定義 hooks。

presenter/controller 也是一個自定義 hooks,內部可以調用我們自己定義的 hooks,以及第三方開源的 hooks 庫,比如 ahooks,vueuse

因為 model 是一個自定義 hooks ,當內部的 state 更新的時候,就會促發(fā)視圖 view 的更新。

參考文章

前端架構 101(六):整潔(Clean Architecture)架構是歸宿 - 知乎 (zhihu.com)

Clean Frontend Architecture:整潔前端架構 | clean-frontend (phodal.github.io)

干貨 | 攜程機票 React Native 整潔架構實踐 (qq.com)

干貨 | Trip.com 機票React Native整潔架構2.0實踐 - 騰訊云開發(fā)者社區(qū)-騰訊云 (tencent.com)

Moving away from ReactJs and VueJs on front-end using Clean Architecture - DEV Community ????????

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容