前後端分離,數據處理到底是該放在前端還是後端?


我給一個相對容易理解的答案。

之前前端就是很少做路由,所有的控制都是交由後端來做,所以調試起來比較麻煩。

之前不少做後端的專註於提供數據,更重要職責是維護系統架構的穩定,保證數據的安全和正確性,而前端人員則專註於交互和快速響應UI的變化。這本身就是兩套不同的思維方式,所以介面文檔在這裡也變得重要起來。

因為在之前沒有前後端分離的時代,很少有介面文檔的說法,只有在Ajax的時候才會有一些,但是大部分都是JSP去提供跳轉數據。而且有介面文檔後可以統一給Android和IOS以及WEB提供統一的介面,實際上是大大方便了維護。

不然有些時候同樣的業務邏輯,可能要寫很多遍,因為不同的終端可能面向不同的WEB程序,從分工的角度來說,前後端的職責變得更加明確了。

不過對SEO來說,確實有些麻煩,所以很多營銷性質的網站還保留了傳統的結構,主要還是要看項目的設計和管理層的目的去考量,拋開目的去談結構都是無稽之談。


如果你對學習人工智慧和深度學習感興趣,可以訂閱我的頭條號,我會在這裡發布所有與演算法、機器學習以及深度學習有關的有趣文章。

GitHub:https://github.com/GraySilver

裡面有大量學習資源和讀書筆記,歡迎大家Follow和Star。

(碼字不易,若文章對你幫助可點個贊~)


這是個架構設計問題,不是簡單地回答「前端」或者「後端」就可以解決的。

一個理想的架構,是應該從業務和應用場景出發,平衡前端、後端和網路的負荷。

  • 後端的服務邏輯要完整,每一個服務要具有「業務價值」,對應一個需求;

  • 前端不能薄薄的一層皮,也不能像Rich Client或者傳統的C/S架構那麼胖;

  • 控制交互次數,單次交互的網路負荷又不宜過高,免得影響用戶體驗。

架構這玩意兒,空對空容易弄成哲學,所以這麼講有點泛泛而談。在您給出的場景中,你的想法,他的做法,都有不當之處:

你認為前端就只做UI和交互,那麼大量的計算尤其是臨時性的計算就必然拋到後端處理了。舉個例子:假設一下返回20行數據,同時返回數量和金額的匯總,如果在後端計算的話,就得一個for,累加20次;如果這個系統並發量還可以的話,那麼耗費的計算資源就很可觀了,這就是個潛在的性能隱患。

但是,把這個臨時性的計算放到前端來處理,什麼效果呢?for一下20次累加,現代瀏覽器執行得非常快的,並且,前端的一個操作通常都以「分鐘」為單位,就是說,你看完20條數據,再點翻頁按鈕,這過程起碼要耗費幾十秒到1分鐘時間,對前端體驗沒有任何負面影響。這樣子,前端就為後端減壓了。為了優化操作,前端還可以在for的時候,每顯示一條,將sum欄位累加一下,幾乎是0代價。

所以說,前端也要負擔一些數據處理任務的,當然,是負責臨時性的,與該用戶相關的數據處理,而不是大段的業務邏輯。

後端做法的錯誤之處在於,設計API的時候沒有考慮業務。按您的描述,返回ID和具體數據,明顯是同一個業務操作所需要的,不用分成兩次先返回ID,再根據ID逐條請求detail數據。換言之,他設計的這個API沒有業務意義,粒度太細,只是資料庫SQL的一種包裝形式而已。那何不提供個通用的訪問DB的API讓前端直接跟DB交互算了。

我多年來的經驗,所謂Architecture Design,並不是什麼分三層四層用什麼框架腳手架那麼表面,而服務層API設計是其中的核心工作,它包含了一個架構師對業務的理解、對全局的把握。Service一定要有服務/業務的概念,不是對應資料庫的CRUD。

這裡面還涉及到一個前後端溝通的問題。前端直接與用戶打交道,需要什麼數據、用戶什麼操作習慣,都要體現在UI上。一定要把這種邏輯和使用習慣明確地傳遞給後端設計/開發人員,它們才曉得該提供什麼粒度的API給前端使用。

最後,軟體開發是一個團隊行為,分析、設計、開發階段都需要溝通溝通再溝通,不要遇到問題了就互相扯皮、甩鍋。

---------------

PS:對企業應用架構設計有興趣的朋友,歡迎關注我的頭條號,私信討論。除了談架構理論之外,可以一起探討實際項目中遇到的設計、架構問題。


後端處理,前端做好用戶交互。對於後端,說幾句,所有最慢的就是資料庫,資料庫已經做了很多優化,包括主從複製,讀寫分離,cdn,等等。不過在黑客攻擊方面,不建議前端處理任何數據,一但處理,黑客很容易就攻擊了。雖然後端也可以攻擊,但前端js是可以看到的,只要有本身讓黑客看到源碼,就可以看你的bug。所以重要數據不僅要加密,而且由後台處理


看了這麼多回答,我覺得和題主問題相關的一個也沒有。而我,深深的經歷過,知道怎麼回事。就好比一個用戶信息,後端給你返回了id,讓你自己根據他別的介面把名字查出來顯示。對吧?如果只是單個用戶的你這樣做沒有問題?但是如果這裡是一個用戶列表,那就必須讓他把名字查出來返給你。


推薦閱讀:

與雷軍10億賭約將到期,董明珠卻說10億不重要。目前看這個賭局誰贏了?為什麼?
手機里千萬不能裝的軟體有哪些?
順豐出資23億建設亞洲首個專門貨運機場,可為什麼建在了湖北?
win10不兼容的軟體有哪些?具體一點?
自動擋車上的P、R、N、D、S、L是什麼意思?

TAG:程序員 | 資料庫 | 編程語言 | 科技 |