MVC 三層架構 是什麼? 我只知道三層肉
三層肉是一種豬肉,常見於各種台灣滷肉飯及韓國鐵板烤肉的食材區XDD
那三層架構是什麼呢??
三層架構是一種常見的B/S軟體架構設計。
分成表現層(Presentation Layer)、業務邏輯層(Business Layer)跟
資料訪問層(Data Access Layer)。
一個軟體或網頁的開發大概幾個大步驟,
(1)首先讓使用者看到畫面,並進行操作。(表現層)
(2)接下來拿到使用者輸入的資料,進行業務邏輯的處理。(業務邏輯層)
(3)與資料庫互動,做增刪改查。(資料訪問層)
(4)最後讓使用者看到相對應的成功畫面。
3層架構便是基於以上的概念設計的,以下個別介紹他們…
三層架構基本介紹
表現層(Presentation Layer) :
表現層前台 :
-介面顯示、與用戶互動
- JSP、JS、HTML…Web前端技術(通常位於WebContent資料夾)
表現層後台 :
-用於控制頁面跳轉、調用業務邏輯層
-Servlet、SpringMVC的Controller、Struts2…(xxx.servlet包中)
2. 業務邏輯層(Business Layer)
-接收表現層的請求與調用
-業務邏輯的撰寫(例如想刪除某user,先查詢是否有此user再進行刪除)
-調用資料訪問層進行資料庫的操作,拿到相關資料並進行處理
-通常稱為Service層(程式放在xxx.Service包)
3. 資料訪問層(Data Access Layer)
-直接對資料庫進行增刪改查等原子性的操作(不可再分割)
-DAO屬於此層,程式通常放在xxx.Dao包
舉個實際例子
當使用者進到我們的網站,註冊會員,輸入他的帳號密碼,此時由"表現層"做畫面的顯示及獲取使用者輸入的資料。然後調用"業務邏輯層"的service進行業務邏輯運算。service此時調用"資料訪問層"的DAO去查詢資料庫中是否已經有這個帳號,service則根據是否已有相同帳號做不同的處理,若無則新增一筆進入資料庫,並顯示註冊成功畫面(表現層),若有則不新增資料到資料庫,且在畫面上提醒使用者換一個帳號。
這樣就完成了整個接收到響應的過程了~~
分層很麻煩,我可以全部寫在同一支class嗎 ?
初學者的確是覺得全部寫在一起比較簡單,但日後隨著系統越來越大功能越來越多,絕對會非常悔不當初XDD
以下是一個經典的例子~
user購物結帳前要登入,你在一支class中寫了登入+結帳。
如果要查詢訂單要登入,你在一支class中寫了登入+查詢訂單。
在領取優惠碼也要登入,你在一支class中寫了登入+領取優惠碼。
如果你每次都不辭辛勞的這樣寫也是蠻讓人佩服的,但如果今天登入的功能有小改動大概會瘋掉…
例如account這個table多了一個重要欄位,每次登入成功時多查出這個欄位,那你就必須在之前寫過且分散在50支class的登入功能全部改一次…
比較好的做法是,當初把業務邏輯寫在各個對應的service,操作不同table這個步驟寫則在各個DAO中,此時要多查出一個欄位的話就只要改動那個DAO即可。
結論
開發時如果不想分層當然是可以的,但維護起來絕對會讓人白眼無極限。
分層的話雖然一開始會覺得麻煩,但好處是解耦合及提高程式的複用率,後續會好處理很多。