Free性欧美Hd另类_精品亚洲欧美视频在线观看_freesex欧美喷水_字幕av在线_久久久久久国产免费_伊人5566

中培偉業IT資訊頻道
您現在的位置:首頁 > IT資訊 > 產品設計 > 前后端分離和解耦

前后端分離和解耦

2021-07-01 10:39:19 | 來源:中培企業IT培訓網
我們一起來探討一下為什么要在軟件開發中進行前后端的分離,如何做到前后端分離,如何解耦。如何解藕這在前后端分離的內容里面有提到過。它只算是一個小小的部分,但是東西雖小,但是它的內容豐富。想要做到解耦也需要調動許多的東西才行。它運行的過程也是很復雜的,成功做到并不容易。

簡單地說,就是要把復雜的問題簡單化,把一個從0到N的問題轉化為N個0到1的問題。另一個相近的說法就是“解耦”。

舉個例子,我們接到一個客戶需求,要求寫一個應用,這個應用中有頁面的切換,有對應頁面的數據交互,數據的獲取,數據的計算,如果把這些功能放在一個單一的應用中的話,從大局觀的角度來看,這個單一的應用是比較復雜的。

為了降低這個復雜度,我們首先要做的就是前后端分開,關于前后端的定義,大體來說是這樣的:前端負責的內容主要有頁面路徑管理,頁面對應數據的顯示與管理等等;后端負責的內容主要有數據的提供,數據的計算,安全性管理等等;前后端的通信一般通過HTTP請求來實現;當然這里也有個例外情況,比如有一部分功能可能要求實時性,像類似聊天類的功能,共享文檔的功能,畫板分享的功能,多人協同操作的功能等等,需要通過socketio這樣的通信機制進行。

再細分一下講,單一的程序框架模型會是MVC(Model-View-Controller)結構的。前后端分離以后,后端會有Model/Entity-Repository/Service-Controller,前端會有View-Model-API調用。

看一下前端部分,View主要是指網頁的頁面,手機端的頁面(Android就是Activity,Layout和View等, iOS就是View Controller和UIView等),如果使用跨平臺技術(如React Native, Flutter,Xamarin等)也離不開上述的概念,大同小異。這部分的處理當然離不開數據Model和API調用。處理好這些以后前端的任務也就做好了。

再看一下后端部分,界面相關的處理已經不再是后端的任務了,后端只需要通過API提供前端需要的數據就可以了。Controller就是用來定義這些API的,這一部分會分析或者計算出前端的輸入和輸出模型,具體處理方式有以下幾個因素考慮:請求的類型如GET,POST, PUT, DELTE,PATCH等;數據From Body,數據From Route,數據From Form等等;數據處理完成以后,一個是通過API返回,一個是更新數據源,這里的數據源可以是數據庫如SQL和NoSQL,可以是消息中間件如Kafka,也可以是數據緩沖服務器如Redis等等。通過上述的描述,我們可以看到后端的任務變得更加輕量級了,邏輯上也更加簡單了。

所以,通過前后端的分離,我們把前端和后端的復雜度始終維持在可控的范圍內。如果在軟件開發中始終使用這種理念的話,我們會大大擴展我們的軟件開發效率和程序質量。因為解決一個N難度的問題顯然要比解決N個1難度問題要困難得多。對于一個N難度的問題,我們將其分解為N個1難度的問題之后,我們可以各個擊破,步步為營,一步一個腳印,在工作中從容而且自信,因為我們始終用最簡單的方法去解決問題。如果碰上復雜的問題,就再將其分化為多個難度為1的問題,以此類推。簡單一些講,就是要保證我們在解決問題的時候,不打無準備之仗,始終腳踏實地,分而治之,避免把我們自己架到火爐上烤。

復雜度降低以后,整個項目的維護成本和擴展成本都會非常的低。我們對項目開發的駕馭能力也會提高很多。

再說一個數據流向的問題,這個主要發生在前端。 這部分的處理會直接關聯到前端程序設計的復雜度。在三大前端框架中有雙向數據流向和單向數據流向,其中React只支持單向數據流向。但是目前有了Hooks機制以后,你可以通過傳Setter和Getter兩個Reference來達到修改數據的目的。這種通過傳遞參數到其他Component的模式實際上增加了程序的復雜度,因為一層層的傳遞使得組件之間的耦合性增強了。

那么如何解決這個問題呢

在Angular中可以通過Service中定義Getter和Setter來解決這個問題,每個需要操作這個數據的組件都可以依賴注入這個Service,有了這個Service,就可以很輕松的讀取和更新其中的數據了,對于數據的監聽,可以通過在Service定義一個Subject,監聽到數據變化以后,你可以更新界面,向服務器發送請求等等,這樣做,組件之間的耦合性就大大降低了。

再說一下單向數據流向機制如Ngrx, VueX, Mux等等。單向數據流向機制在目前的前端開發中使用很普遍,然而,實際上這種機制會增加程序的復雜度。這個主要是因為這種機制會在前端開發層級中引入另外一套體系來維護數據的流向,假如我們對已有的業務定義為從0到1的實現,加上這個機制以后,就變成了0到1再加上另外一個0到1.變成了0到2的問題。這就變復雜了。

前端只要做好如下的任務如頁面的切換,數據與后端的交互,數據模型與API的對應, 組件盡量的寫成Self-Contained就可以了。

所以我不建議在前端中再額外的添加類似的數據流向機制了。

再談一下后端的分析。我們在談后端的時候,我們不太關心使用什么技術(Node JS,.net Core,SpringBoot,PHP, Python, Ruby On Rails等等),這是因為后端的邏輯是清晰的,不管你用那種技術,程序的設計的層級是大同小異的。

后端的主要任務是API數據的提供。比如用戶相關的API,創建一個用戶,更新一個用戶,刪除一個用戶等等的操作都是在一個用戶Controller定義相關的API。對于Controller的添加,我建議要根據業務層來添加,不要在一個Controller中做太多的事情。比如我們可以添加Book Controller來處理Book相關的操作,訂單Controller來處理訂單相關的操作。

這樣做是為了把API設計變成線性的,平行的,各自Controller之間的耦合性降到最低,從而也就降低了復雜度。

進一步說,在實現的層級上,我們可以有Data Set對應數據庫表格,Entity對應數據表格記錄,Model對應API數據模型,Service/Repository負責邏輯實現等等。

在后端技術選取中,數據庫相關的操作是一個不可逾越的門檻,有的框架使用類似EntityFramework的機制如.NetCore和PHP Laravel, 有的使用類似JPA Hibernate,Mybatis如Spring Boot,有的則直接使用JDBC SQL語句執行的方式,有的結合Stored Procedure。在這個地方,按照程序復雜度排序的話,由低到高分別是EntityFrameWork

當然,數據庫的設計,數據庫的升級Migration也都是關系到程序項目復雜度的因素。這個要結合具體的后端技術來談。在本文中我們就不展開了。

前后端分離的作用給用戶帶來了許多的便利。互聯網與科技時代并存的年代,會有怎樣的浪潮出現?想要了解更多信息,請繼續關注中培偉業。

主站蜘蛛池模板: 夜夜躁狠狠躁夜躁2021 | 边啃奶边躁狠狠躁a片动图 狠狠躁天天躁夜夜躁婷婷老牛影视 | 成人看片 | 国产精品一区二区久久久久 | 女同互忝互慰dv毛片观看 | 日本韩国一级 | 夜夜爽一区二区三区 | 日本一级淫片1000部 | 国产女合集小岁9三部 | 久久久久久国产精品免费免费男同 | 欧美亚洲另类久久综合二区 | 琪琪午夜成人理论福利片 | 久久久久久久久久久丰满 | 天天综合网久久 | 麻豆av传媒蜜桃天美传媒 | 日本无码精品一二三四区视频 | 久久99免费观看 | CHINESE国产AV巨作VIDEOS | 亚洲精品久久无码2021 | 不卡中文字幕在线 | 国产做a爱一级毛片久 | 亚洲AV永久无码精品天堂动漫 | 五月精品夜夜春夜夜爽久久 | 国产成人无码A区在线观看免费 | 91麻豆精品国产综合久久久久久 | 大雞巴亂倫有声小说 | 97热视频 | 欧美日韩国产一区二区三区不卡 | 四色男人| www.免费av| 日韩不卡一二三 | 中文字幕亚洲精品一区 | 日日摸夜夜添欧美一区 | 国产成人免费高清AV | 日韩精品一区二区三区老鸭窝 | 国产在线观看高清你懂的 | 亚洲91在线视频 | 免费国产乱码一二三区 | 桃色av网站 | 欧美成本人视频免费播放 | JK小仙女自慰流白浆免费网站 |