MVC名詞解釋
這一個章節(jié)說明項目中應該建立哪些
package,形成一個良好開發(fā)的習慣,與統(tǒng)一首先,先了解下三層的一些概念:
MVC是一種設計模式,指的是三層
Model模型層(在開發(fā)中用于存放實體類、持久化對象)View視圖層(在開發(fā)指 html、jsp 等頁面)Controller控制層(在開發(fā)中負責業(yè)務邏輯流程的控制)
Model
定義了一些實體類 ,具體對應數(shù)據(jù)庫中的一張表,class 的屬性對應表的字段名,通常開發(fā)中的entity包就是數(shù)據(jù)模型層
View
我自己的理解就是視圖應用程序用戶界面相關部分啦,所以就大概理解為 html,Jsp等頁面,
網(wǎng)上搜集的資料總結(jié)大概描述為:(不對的地方請幫我舉出,謝謝各位看官)
-
View 會從 Model 中取數(shù)據(jù)顯示
關于這點可能是 html 中慢慢的標簽套表達式,表達式滿天飛
Model 提供數(shù)據(jù)的最新狀態(tài)給 View (通知更新)
-
當Model 變化時,View 負責維護數(shù)據(jù)表現(xiàn)的一致性。
頁面得刷新,(一次轉(zhuǎn)發(fā))才能變化吧
-
View 還同時將用戶的請求通知控制器
也就是 ajax 請求吧
Controller
控制器定義了應用程序的行為,供了一系列的接口訪問路徑.
它負責對來自視圖的用戶請求進行解釋,并把這些請求映射成相應的行為,這些行為由模型負責實現(xiàn)
-
在一個Web應用程序中,它們的表現(xiàn)形式可能是一些來自客戶端的GET或POST的HTTP請求
@ResponseBody //表示該類下面的所以方法將返回 Json格式的字符串 public class UserController{ @RequestMapping('/login') //提供的訪問路徑,url: 項目路徑 + /login 訪問 public String login(){ /*具體實現(xiàn)邏輯*/ } @RequestMapping('/regiest') public String(){ /*具體實現(xiàn)邏輯*/ } }
-
Controller本身不對model數(shù)據(jù)進行操作,只是負責接到任務,控制任務走向,分派任務(dispatch),指定具體的model來操作數(shù)據(jù),通常進行操作的時候(actions)由具體的service來實現(xiàn)
在此處加入了 Vuex 中的數(shù)據(jù)處理的關鍵詞,方便理解
JavaBean、Entity、Pojo、Model的區(qū)別
在Model 層還可以聽到一些詞語比如: javaBean,pojo,entity,還是有些區(qū)別的:
-
entity名稱譯為實體,在開發(fā)過程中可以在項目目錄中建立entity包,籠統(tǒng)的指一切實體,public class Person{ private String name; private int age; private String phoneNumber; private String address; } javaBean意為:
- 該類有系列的
private屬性,(所以他的成員屬性用getter與setter來訪問) - 必須含有一個 公有的無參構(gòu)造方法,(向外暴露 new 實例)
- 該類有可能要被
implement,extend(“侵入”) - 這個類應是可序列化的。實現(xiàn)
serializable接口。 (關于這一點,我上學的時候好像沒學到??)
大概長下面這種樣子:
public class Chinese extends Person{
/* 勤勞、勇敢、愛和平的中國人,屬性為私有,值為 true,通過 setter and getter 操作*/
private Boolean diligent;
private Boolean brave;
private Boolean peaceful;
/* 無參數(shù)的構(gòu)造方法,public公開的,
* 意味著國家將堅定不移走開放路線,深化改革開放,
* 時時刻刻向世界展示新中國 new
*/
public Chinese(){
}
/*public 公開的有參數(shù)的構(gòu)造方法,想給新中國添加點光彩嘛?*/
public Chinese(Boolean diligent,Boolean brave,Boolean peaceful){
this.diligent = diligent;
this.brave = brave;
this.peaceful = peaceful;
}
public Boolean getDiligent() {
return diligent;
}
public void setDiligent(Boolean diligent) {
this.diligent = diligent;
}
public Boolean getBrave() {
return brave;
}
public void setBrave(Boolean brave) {
this.brave = brave;
}
public Boolean getPeaceful() {
return peaceful;
}
public void setPeaceful(Boolean peaceful) {
this.peaceful = peaceful;
}
}
Chinese繼承了Person類,也具有Person的屬性
-
pojo(plain old java object)樸素的、簡單的 java 對象 。
- 類的成員是私有的,且有一系列的
setterandgetter方法來提供訪問 - 它沒有繼承 (
extends)也沒有 實現(xiàn)(implements) 任何的 class 或者 interface 更沒有被其它東西而“侵入”
總結(jié):
從比較可以看出,
pojo嚴格遵循 “樸素” 標準,僅僅只是作為數(shù)據(jù)的臨時載體,不具有業(yè)務邏輯處理能力而
JavaBean他是 一套Java Object的編寫規(guī)范,他除了一些該有的 方法外,往往還含有其它 邏輯方法在其中
Spring 通過 依賴注入 與 切面編程,使得程序之間結(jié)構(gòu)、分工明確,讓代碼不再“緊耦合”,在使用了
Pojo對象后我們很少用 new 關鍵詞來產(chǎn)生對象正是Spring 通過Java的反射機制,能 動態(tài)的向某個對象提供它所需要的其他對象,使得代碼更簡潔
從一個簡單的 MVC 業(yè)務流程開始
我在此描述一個登錄的業(yè)務流程,需要注意的是,平常開發(fā)過程中,我們并不只是用到了MVC 三層的分類,還可能有其他層,比如Service,Dao / Mapper下面流程中的描述中即將出現(xiàn)
web視圖發(fā)送一個請求 去往一個接口,比如
/login找到對應的
Controller,在spring 中具體路徑體現(xiàn)為RequestMapping("/login")訪問這個路徑,執(zhí)行該``RequestMapping`中的邏輯
Controller找到對應的ServiceService找到對應的DaoDao聯(lián)合Model操作數(shù)據(jù)庫返回結(jié)果給
ControllerController對結(jié)果進行處理
Dao層為數(shù)據(jù)訪問層,比較基礎的操作,具體到對于某個表、某個實體的增刪改查,操作數(shù)據(jù)庫,也就是Mapper層(一些SQL語句)
注意:在比較原生的開發(fā)中 我們使用
Dao,而關鍵詞Mapper是在Mybatis、Hibernate這樣的SQL映射工具出現(xiàn)后常常見到的
service層為業(yè)務邏輯層(具體做事的層),接受Controller層的委派,跟Dao / Mapper打交道,交流完再將結(jié)果反饋給Controller
元旦快樂!今年也要進步!
--------------------------------轉(zhuǎn)載請注明出處---------------------------------