MVC設計模式


MVC設計模式

 

寫了幾天代碼,然后對之前學到的知識,進行反思,寫出來放在QQ空間上和博客上,目的是互相學習,然后希望可以得到編程高手的補充!這是我轉載加修改的博客。


這是我做了2、3天左右的JavaWeb管理系統,bean package放JavaBean類,dao package放數據庫操作方法的接口類。daoimpl是實現dao接口的類。factory package是dao工廠類。util package是工具包類,里面有數據庫連接類和 分頁類。servlet package是servlet類,是整個JavaWeb項目的控制類。view文件夾里全是.jsp文件。



學習MVC設計模式之前,先學習DAO設計模式。下面是我轉的博客,是個挺不錯的例子
DAO設計模式:

1、DAO簡介:

      DAO設計模式是屬於J2EE數據層的操作,使用DAO設計模式可以簡化大量代碼,增強程序的可移植性。

 

2、DAO各部分詳解:

DAO設計模式包括以下5個主要部分:

1)、數據庫連接類;

      數據庫連接類的主要功能是連接數據庫並獲得連接對象,以及關閉數據庫。通過數據庫連接類可以大大的簡化開發,在需要進行數據庫連接時,只需常見該類的實例,並調用其中的方法就可以獲得數據庫連接對象和關閉數據庫,不必再進行重復操作。例:

  1. Package com.javaweb.dao1  
  2.   
  3. Import java.sql.*;  
  4.   
  5. Public class DataBaseConnection{  
  6.   
  7.       Private final String DBDRIVER = “com.mysql.jdbc.Driver”;  
  8.   
  9.       Private final String DBURL = “jdbc:mysql://localhost:3306/javaweb”;   
  10.   
  11.       Private final String DBUSER = “root””;  
  12.   
  13.       Private final String DBPASSWORD = “585762”;  
  14.   
  15.       Private Connection conn = null;  
  16.   
  17.       Public DataBaseConnection(){  
  18.   
  19.              Try{  
  20.   
  21.                     Class.forName(DBDRIVER);  
  22.   
  23.                     This.conn =  
  24.   
  25.                                  DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);  
  26.   
  27.              }catch(Exception e){  
  28.   
  29.                     System.out.println(“加載數據庫驅動失敗!”);  
  30.   
  31.              }  
  32.   
  33.       }  
  34.   
  35.       Public Connection getConnection(){  
  36.   
  37.              Return conn;  
  38.   
  39.       }  
  40.   
  41.       Public void close(){  
  42.   
  43.              Try{  
  44.   
  45.                     Conn.close();  
  46.   
  47.              }catch(){  
  48.   
  49.                     System.out.println(“數據庫連接關閉失敗!”);  
  50.   
  51.              }  
  52.   
  53.       }  
  54.   
  55. }  
Package com.javaweb.dao1Import java.sql.*;Public class DataBaseConnection{ Private final String DBDRIVER = “com.mysql.jdbc.Driver”; Private final String DBURL = “jdbc:mysql://localhost:3306/javaweb”; Private final String DBUSER = “root””; Private final String DBPASSWORD = “585762”; Private Connection conn = null; Public DataBaseConnection(){ Try{ Class.forName(DBDRIVER); This.conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD); }catch(Exception e){ System.out.println(“加載數據庫驅動失敗!”); } } Public Connection getConnection(){ Return conn; } Public void close(){ Try{ Conn.close(); }catch(){ System.out.println(“數據庫連接關閉失敗!”); } }}

 

2)、VO類:

      VO類是一個包含屬性和表中字段完全對應的類,並在該類中提供settergetter方法來設置並獲取該類中的屬性。例:

  1. Package com.javaweb.dao1  
  2.   
  3. Public classs User{  
  4.   
  5.       Private int userid;  
  6.   
  7.       Private String username;  
  8.   
  9.       Private String password;  
  10.   
  11.       Public int getUserid(){  
  12.   
  13.             Return userid;  
  14.   
  15.       }  
  16.   
  17.       Public void setUserid(int userid){  
  18.   
  19.              Return userid;  
  20.   
  21.       }  
  22.   
  23.       Public String getUsername(){  
  24.   
  25.             Return username;  
  26.   
  27.       }  
  28.   
  29.       Public void setUsername(String username){  
  30.   
  31.              Return username;  
  32.   
  33.       }  
  34.   
  35.       Public String getUserpassword(){  
  36.   
  37.             Return userpassword;  
  38.   
  39.       }  
  40.   
  41.       Public void setUserid(String userpassword){  
  42.   
  43.              Return userpassword;  
  44.   
  45.       }  
  46.   
  47. }  
Package com.javaweb.dao1Public classs User{ Private int userid; Private String username; Private String password; Public int getUserid(){ Return userid; } Public void setUserid(int userid){ Return userid; } Public String getUsername(){ Return username; } Public void setUsername(String username){ Return username; } Public String getUserpassword(){ Return userpassword; } Public void setUserid(String userpassword){ Return userpassword; }}

 

3)、DAO接口:

      DAO接口中定義了所有的用戶操作,如添加記錄、刪除記錄及查詢記錄等。不過因為是借口,所以僅僅是定義,需要子類實現。例:

  1. Package com.javaweb.dao1;  
  2.   
  3. Import java.util.*;  
  4.   
  5. Public class UserDAO{  
  6.        public void insert(User user)throw Exception;  
  7.   
  8.       Public void update(User user)throw Exception;  
  9.   
  10.       Public void delete(int userid)throw Exception;  
  11.   
  12.       Public User queryById(int userid)throw Exception;  
  13.   
  14.       Public List queryAll()throw Exception;  
  15.   
  16. }  
Package com.javaweb.dao1;Import java.util.*;Public class UserDAO{ public void insert(User user)throw Exception; Public void update(User user)throw Exception; Public void delete(int userid)throw Exception; Public User queryById(int userid)throw Exception; Public List queryAll()throw Exception;}

 

4)、DAO實現類:

      DAO實現類實現了DAO接口,並實現了接口中定義的所有方法。

5)、DAO工廠類:

      在沒有DAO工廠類的情況下,必須通過創建DAO實現類的實例才能完成數據庫操作。這時就必須知道具體的子類,對於后期的修改非常不方便。

      使用DAO工廠類,可以比較方便地對代碼進行管理,而且可以很好地解決后期修改的問題,通過該DAO工廠類的一個靜態方法來獲取DAO實現類實例。這時如果要替換DAO實現類,只需要修改該Dao工廠類中的方法代碼,而不必邀修改所有的操作數據庫代碼。例:

  1. Package com.javaweb.dao1;  
  2.   
  3. Public class DAOFactory{  
  4.   
  5.       Public static UserDAO getUserDAOInstance(){  
  6.   
  7.              Return new UserDAOImpl();  
  8.   
  9.       }  
  10.   
  11. }  
  12.  
  13.    
Package com.javaweb.dao1;Public class DAOFactory{ Public static UserDAO getUserDAOInstance(){ Return new UserDAOImpl(); }} 

3、使用DAO完成數據庫操作:

1)、添加記錄:

2)、更新記錄:

3)、刪除記錄:

4)、查詢記錄:

 
 




MVC模式
(Model-View-Controller)是軟件工程中的一種軟件架構模式,把軟件系統分為三個基本部分:模型(Model)、視圖(View)和控制器(Controller)。

MVC模式最早由Trygve Reenskaug在1978年提出[1] ,是施樂帕羅奧多研究中心(Xerox PARC)在20世紀80年代為程序語言Smalltalk發明的一種軟件設計模式。MVC模式的目的是實現一種動態的程序設計,使后續對程序的修改和擴展簡化,並且使程序某一部分的重復利用成為可能。除此之外,此模式通過對復雜度的簡化,使程序結構更加直觀。軟件系統通過對自身基本部分分離的同時也賦予了各個基本部分應有的功能。專業人員可以通過自身的專長分組:

  • (控制器Controller)- 負責轉發請求,對請求進行處理。
  • (視圖View) - 界面設計人員進行圖形界面設計。
  • (模型Model) - 程序員編寫程序應有的功能(實現算法等等)、數據庫專家進行數據管理和數據庫設計(可以實現具體的功能)。

ModelViewControllerDiagramZh.png

。在視圖中其實沒有真正的處理發生,不管這些數據是聯機存儲的還是一個雇員列表,作為視圖來講,它只是作為一種輸出數據並允許用戶操縱的方式。
模型
   模型表示企業數據和業務規則。在MVC的三個部件中,模型擁有最多的處理任務。例如它可能用象EJBs和ColdFusionComponents這樣的構件對象來處理數據庫。被模型返回的數據是中立的,就是說模型與數據格式無關,這樣一個模型能為多個視圖提供數據。由於應用於模型的代碼只需寫一次就可以被多個視圖重用,所以減少了代碼的重復性。
控制器
  控制器接受用戶的輸入並調用模型和視圖去完成用戶的需求。所以當單擊Web頁面中的超鏈接和發送HTML表單時,控制器本身不輸出任何東西和做任何處理。它只是接收請求並決定調用哪個模型構件去處理請求,然后再確定用哪個視圖來顯示返回的數據。

 

優點:

 

在最初的JSP網頁中,像數據庫查詢語句這樣的數據層代碼和像HTML這樣的表示層代碼混在一起。經驗比較豐富的開發者會將數據從表示層分離開來,但這通常不是很容易做到的,它需要精心地計划和不斷的嘗試。MVC從根本上強制性地將它們分開。盡管構造MVC應用程序需要一些額外的工作,但是它帶給我們的好處是毋庸置疑的。

首先,多個視圖能共享一個模型。如今,同一個Web應用程序會提供多種用戶界面,例如用戶希望既能夠通過瀏覽器來收發電子郵件,還希望通過手機來訪問電子郵箱,這就要求Web網站同時能提供Internet界面和WAP界面。在MVC設計模式中,模型響應用戶請求並返回響應數據,視圖負責格式化數據並把它們呈現給用戶,業務邏輯和表示層分離,同一個模型可以被不同的視圖重用,所以大大提高了代碼的可重用性。

其次,控制器是自包含(self-contained)指高獨立內聚的對象,與模型和視圖保持相對獨立,所以可以方便的改變應用程序的數據層和業務規則。例如,把數據庫從MySQL移植到Oracle,或者把RDBMS數據源改變成LDAP數據源,只需改變控制器即可。一旦正確地實現了控制器,不管數據來自數據庫還是LDAP服務器,視圖都會正確地顯示它們。由於MVC模式的三個模塊相互獨立,改變其中一個不會影響其他兩個,所以依據這種設計思想能構造良好的少互擾性的構件。

此外,控制器提高了應用程序的靈活性和可配置性。控制器可以用來連接不同的模型和視圖去完成用戶的需求,也可以構造應用程序提供強有力的手段。給定一些可重用的模型和視圖,控制器可以根據用戶的需求選擇適當的模型進行處理,然后選擇適當的的視圖將處理結果顯示給用戶。

MVC的優點
1.低耦合性

  視圖層和業務層分離,這樣就允許更改視圖層代碼而不用重新編譯模型和控制器代碼,同樣,一個應用的業務流程或者業務規則的改變只需要改動MVC的模型層即可。因為模型與控制器和視圖相分離,所以很容易改變應用程序的數據層和業務規則。
2.高重用性和可適用性
  隨着技術的不斷進步,現在需要用越來越多的方式來訪問應用程序。MVC模式允許你使用各種不同樣式的視圖來訪問同一個服務器端的代碼。它包括任何WEB(HTTP)瀏覽器或者無線瀏覽器(wap),比如,用戶可以通過電腦也可通過手機來訂購某樣產品,雖然訂購的方式不一樣,但處理訂購產品的方式是一樣的。由於模型返回的數據沒有進行格式化,所以同樣的構件能被不同的界面使用。例如,很多數據可能用HTML來表示,但是也有可能用WAP來表示,而這些表示所需要的命令是改變視圖層的實現方式,而控制層和模型層無需做任何改變。
3.較低的生命周期成本
  MVC使開發和維護用戶接口的技術含量降低。
4.快速的部署
  使用MVC模式使開發時間得到相當大的縮減,它使程序員(Java開發人員)集中精力於業務邏輯,界面程序員(HTML和JSP開發人員)集中精力於表現形式上。
5.可維護性
  分離視圖層和業務邏輯層也使得WEB應用更易於維護和修改。
6.有利於軟件工程化管理
  由於不同的層各司其職,每一層不同的應用具有某些相同的特征,有利於通過工程化、工具化管理程序代碼。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM