Benjamin
Benjamin

新人工程師,偶爾分享工作心得(預計?

工作隨筆-後端分層的意義

今天出大包了。


在說說發生什麼之前先簡單介紹一下我的工作。

我是個使用Java spring boot MVC架構的菜鳥後端工程師,後端的程式分類大多數分為四類:
model,定義各種資料的欄位名、欄位變數型態。
repository,根據model的定義讀寫資料庫內容。
service,對資料進行邏輯的判斷及運算,必要時輸出一些例外情況的錯誤訊息。
controller,定義後端api的路徑、連線的method類型、輸入輸出的參數名稱及型態。

後端運作時的流程是這樣的:
有人對後端程式發了一個符合規則的請求(request),controller接收到之後,呼叫一或多個service的函式,service檢查資料的數值正確可用,呼叫repository寫入/讀取資料,再將結果回傳給controller,controller將結果回應給外部的請求,這次流程就結束了。

是的,使用者呼叫controller,controller呼叫service,service呼叫repository,repository存取資料,這是應該遵守的原則,應避免呼叫同層的函式,導致結構不清。


今天將程式從測試環境上線後出現了一些問題需要修正,卻發現自己寫的混亂不堪,和前輩討論過才找到解決方法。

問題出在我對repository的誤用。

repository只負責執行而已,你說我做,不該在這層判斷輸入的值決定執行什麼操作,而是由service判斷之後,呼叫特定功能的repository函式。

「service在呼叫repository的時候,應該能預期這次進行什麼操作,結果只有正常和異常兩種而已。」這是前輩教的觀念。

我將repository的一個函式用途定為[更新],輸入一串數字後比對另一份總表,將這串數字缺少的部分刪除對應資料,有的部分新增對應資料,可說是非常混亂。

經過改進後,repository的[更新]拆成了[新增]、[刪除]兩個函式,service從統一呼叫[更新]變為經判斷後呼叫[新增]或[刪除],管理上方便多了。


專業分工真是很重要呢。

CC BY-NC-ND 2.0 版权声明

喜欢我的文章吗?
别忘了给点支持与赞赏,让我知道创作的路上有你陪伴。

加载中…

发布评论