1. 程式人生 > >Java學習中MVC模式的一些理解

Java學習中MVC模式的一些理解

首先,MVC並不適合小型甚至中等規模的應用程式,花費大量時間將MVC應用到規模並不是很大的應用程式通常會得不償失。

三層架構:

通常意義上的三層架構就是將整個業務應用劃分為:表現層(UI)、業務邏輯層(BLL或SERVICES)、資料訪問層(DAO)(data access object)。

表現層實現的代表作品是Struts框架,業務層實現的代表作品是Spring,持久層實現的代表作品是Hibernate。層就相當於一個黑盒子,我們不用知道它內部怎麼實現,只需要知道如何去呼叫它就行了。每層只與上下相鄰的兩層打交道。當一層內部由於技術變遷發生變化時,只要介面不變,其他層不用做任何改變。分層之後靈活性提高,也便於團隊分工開發。

MVC和三層架構的區別和聯絡:

MVC是 Model-View-Controller,嚴格說這三個加起來以後才是三層架構中的UI層,也就是說,MVC把三層架構中的UI層再度進行了分化,分成了控制器、檢視、實體三個部分,控制器完成頁面邏輯,通過實體來與介面層完成通話;而C層直接與三層中的BLL進行對話。
mvc可以是三層中的一個表現層框架,屬於表現層。三層和mvc可以共存。
三層是基於業務邏輯來分的,而mvc是基於頁面來分的。
MVC主要用於表現層,3層主要用於體系架構,3層一般是表現層、中間層、資料層,其中表現層又可以分成M、V、C,(Model View Controller)模型-檢視-控制器。

在一般的Java程式中,action 是業務層的一部分,是一個管理器 (總開關)(作用是取掉轉)(取出前臺介面的資料,呼叫biz方法,轉發到下一個action或者頁面)。

模型層(model)一般是實體物件(如User類),作用是暫時儲存資料方便持久化(存入資料庫或者寫入檔案)。

dao是資料訪問層,就是用來訪問資料庫實現資料的持久化(把記憶體中的資料永久儲存到硬碟中。

總的說來:

Dao主要做資料庫的互動工作;

Model 是模型,存放你的實體類;

Service 做相應的業務邏輯處理;

Action是一個控制器。

記得以前剛學程式設計的時候,都是在service裡直接呼叫dao,service裡面就new一個dao類物件,呼叫,其他有意義的事沒做,也不明白有這個有什麼用,參加工作久了以後就會知道,業務才是工作中的重中之重。

如果熟悉像spring這樣的框架,你會了解面向介面程式設計,表示層呼叫控制層,控制層呼叫業務層,業務層呼叫資料訪問層。初期也許都是new物件去呼叫下一層,比如你在業務層new一個DAO類的物件,呼叫DAO類方法訪問資料庫,這樣寫是不對的,因為在業務層中是不應該含有具體物件,最多隻能有引用,如果有具體物件存在,就耦合了。當那個物件不存在,我還要修改業務的程式碼,這不符合邏輯。好比主機板上記憶體壞了,我換記憶體,沒必要連主機板一起換。我不用知道記憶體是哪家生產,不用知道多大容量,只要是記憶體都可以插上這個介面使用。這就是MVC的意義。

接下來說一下service的意義,其實因為你現在做東西分層次不是那麼嚴格,在一個你做東西業務本身也少,舉個最簡單的例子,你做一個分頁的功能,資料1000條,你20條在一個頁,你可以把這個功能寫成工具類封裝起來,然後在業務層裡呼叫這個封裝的方法,這才是業務裡真正幹得事,只要沒訪問資料庫的,都要在業務裡寫。

至於你說的為什麼要用service層封裝,我認為:一般來說,某一個程式的有些業務流程需要連線資料庫,有些不需要與資料庫打交道而直接是一些業務處理,這樣就需要我們整合起來到service中去,這樣可以起到一個更好的開發與維護的作用,同時也是MVC設計模式中model層功能的體現。

Dao層:一般可以再分為***DaoIface介面和***DaoImpl實現類,如userDaoIface介面和userDaoImpl實現類,介面負責定義資料庫curd的操作方法,實現類負責具體的實現,即實現Dao介面定義的方法。

Service層:引用對應的Dao層資料庫操作,在這裡可以編寫自己需要的程式碼(比如簡單的判斷),也可以再細分為Service介面和ServiceImpl實現類。

Action層:引用對應的Service層實現業務邏輯,在這裡結合Struts的配置檔案,跳轉到指定的頁面,當然也能接受頁面傳遞的請求資料,也可以做些計算處理、前端輸入合法性檢驗(前端可修改網頁繞過前端合法性檢驗,需在後臺加一層)。

Action像是服務員,顧客點什麼菜,菜上給幾號桌,都是ta的職責;Service是廚師,action送來的選單上的菜全是ta做的;Dao是廚房的小工,和原材料(通過hibernate操作資料庫)打交道的事情全是ta管。

物件的呼叫流程:JSP—Action—Service—DAO—Hibernate—資料庫。

在一個自編的mvc模式的專案中,原始檔中各個包的命名規範為:com.公司名.系統名.模組名 。

程式碼目錄結構及其意義為:

Action : 負責頁面邏輯,將呼叫service的結果返回到頁面中。

Service : 介面定義 ---impl 介面的實現,負責業務邏輯。

Domain 對應資料庫表的pojo。

Dao : 只負責連線資料庫,從資料庫中查詢結果,包裝成物件後返回、

util :工具類。