<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-86  評論-767  文章-3  trackbacks-3

    第三章 一個輕量級的Project Management Tool(LPMT)

    在這里我們引入一個輕量級的 Project Management Tool(LPMT) 的例子,以此利用 MVC 設計模式和 Struts 技術來構建一個結構清晰、可擴展、可復用的 Web 應用程序,并借此說明如何使用 Struts 來實現 MVC 設計模式,以及在 Struts 的使用過程中如何構建清晰的系統架構以及實現 WebForm 和代碼復用。這里我們假定一個 Project 、服務或者產品就是一個 Issue ;在每個 Issue 的開發周期內,當 Issue 在各個開發小組中流轉的時候會生成一個或多個任務稱為 IssueData ;每個 IssueData 都有相應的開始時間、結束時間和提交時間; IssueData 的結束時間和提交時間是可更改的,每次更改系統自動生成一個 Log 記錄這種更改。 LPMT 需要實現對上述 Issue IssueData Log 的顯示、管理和其他必要的功能。本人所在的三人小組將以 Java Hibernate Struts Framework 技術為依托實現上述需求。

    3.1 LPMT的用戶需求

    我們通過采用與用戶面談的方式,初步抽象了以下的用戶需求 ( 系統功能 )

    標識

    ????????????????????????? 功能

    分類

    Y1.1

    顯示 issue 的啟動時間,完成時間和工作組。

    明顯

    Y1.2

    TL 可設定 issue 完成時間并公布。

    明顯

    Y1.3

    TL 可修改原定完成時間。(注:需注明原因)

    明顯

    Y1.4

    issue 進度修改后自動給相關 TL e-mail

    明顯

    Y1.5

    可記錄 issue 原狀態及修改后狀態。

    明顯

    Y1.6

    可查詢 issue 目前進度或變更情況。

    明顯

    Y1.7

    可統計 issue 的各項情況(如從完成到啟動的時間間隔等)并生

    報表。

    明顯

    Y1.8

    各部門完成各自進度后系統自動給相關人員發 e-mail

    明顯

    Y1.9

    PM 可設置或調整 issue 的優先級。(手動)

    明顯

    由于用戶的需求是模糊不確定、可擴展的,故由此構建的系統必須滿足結構清晰、可復用、可擴展等要求。

    3.2 LPMT的需求實現

    通過架構設計和編碼,我們最終實現了上述大部分需求。

    4-5.jpg?

    ?

    6-7.jpg

    ?

    8-9.jpg

    10-11.jpg

    第四章 LPMT中的MVC多層架構實現

    LPMT 中,為了使得系統可擴展、易維護、易修改、結構清晰,我們采用 MVC 設計模式,構建多層的體系結構,通過各層的協調配合,實現系統需求。

    4.1 系統架構

    LPMT 中,我們設置了 View Controller Logic Model Data Persistence 五個邏輯層,通過各邏輯層之間的配合,應用 MVC 設計模式,實現系統需求。

    4.1.1 Data Persistence

    也稱數據持久層。數據持久層負責數據庫映射,隔離數據庫操作,將數據庫操作設計成 Java APIs 。此邏輯層可由 Hibernate DAO Connection Pool 等多種技術實現。在 LPMT 中,我們采用 Hibernate 技術,將數據庫的表映射成為對象 (issuecontrol.objects ) ,比如 Issue 表對應 Issue.java Flag 表對應 Flag.java IssueData 表對應 IssueData.java 等,將對數據庫的各種操作封裝在 IssueDAO UserDAO 兩個 DAO 類中。 DAO 類代碼見附錄。

    4.1.2 Logic

    也稱事務邏輯層。在一個規范的 J2EE 架構中,不同層的數據表示應該被限制在層內,而不應該擴散到其它層,這樣可以降低層間的耦合性,提高 J2EE 架構整體的可維護性和可擴展性。比如說 View 層的邏輯進行了修改,那么只需要修改 ActionForm 的結構,而不需要觸動 Data Persistence 層和 Logic 層的代碼修改。同樣,當數據庫表進行了小的調整,那么也只需要修改 Data Persistence 層數據表示,而不需要觸動 Model 層代碼和 View 層代碼。因此,我們在 Model 層和 Data Persistence 層中間插入 Logic 層,以降低 Data Persistence Model 層之間的耦合關系。 Logic 層類以 Bean 結尾,如 IssueBean.java UserBean.java Model 通過 Logic Bean 調用 Data Persistence 層的 DAO 類,實現對數據庫操作以及其他業務邏輯操作。 Bean 類代碼見附錄。

    4.1.3 Model

    也稱對象層。包括所有 Action 類、 ActionForm 類、和其他顯示類 (issuecontrol.actionform 包、 issuecontrol.action 包、 issuecontrol.view )

    issuecontrol.actionform 包中的所有類都派生自 ActionForm ,與 View 層的表單頁面一一對應,用于定義客戶端顯示表單,封裝業務數據,在 Logic Model Controller View 各邏輯層之間作為數據傳輸媒介。在 J2EE 架構里面, ActionForm 可以由 Entity Bean Session Bean 來表示,以期實現業務邏輯重用。

    Issuecontrol.view 包為顯示包,其中的類為顯示類,負責特殊對象表單的顯示,比如分頁顯示的 Issue 等。

    Issuecontrol.action 包中的所有類都派生自 Action ,用于封裝具體的處理邏輯,調用 Logic 層的業務邏輯類,實現業務操作,讀寫 ActionForm 類,并將結果返回 View 層顯示。部分 Action ActionForm 見附錄。

    4.1.4 Controller

    也稱控制層。包括 ActionServlet ActionMapping RequestProcessor Struts 類。 ActionServlet 負責接受用戶請求,并將用戶請求引導到正確的頁面。 ActionMapping 包含 ActionServlet 的目標映射, RequestProcessor 負責與 Action 交互。 ActionMapping 的目標映射在 struts-config.xml 配置文件中完成。 Struts-config.xml 代碼見附錄。

    4.1.5 View

    也稱顯示層。由 JSP 頁面組成。每個 JSP 頁面由 HTML Struts 標簽庫實現控制和顯示邏輯。部分 View 代碼見附錄。

    4.2 MVC模式的實現邏輯

    上述各邏輯層各司其職,互相配合,盡量降低邏輯層之間的耦合性,提高內聚性。圖 11 為上述邏輯層之間的關系。

    12.jpg

    (1)???? 客戶端向服務器提交 Http 請求

    (2)???? ActionServlet 接受客戶端提交的 Http 請求,載入屬性文件 (Properties files) ,選擇目標 Action ,將控制權交給 RequestProcessor

    (3)???? RequestProcessor 根據 URL struts-config.xml 中的 actionmapping 尋找相應的 Action ;新建或者復用對應的 ActionForm ,封裝包含在請求信息中的表單屬性,檢查數據的合法性,并將 ActionFor 傳遞給目標 Action

    (4)???? 目標 Action 接受傳遞過來的 ActionForm ,讀出 ActionForm 里面的屬性,調用 Logic 層的業務邏輯 Bean ,而 Bean 則調用相應 DAO 類的方法,進行持久對象的持久化操作,最終完成相應的業務邏輯操作。操作過程一旦出現異常, Action 也將一并處理。在完成業務邏輯操作后, Action 返回一個 ActionMapping 對象,告訴 RequestProcessor 指向目標 View 頁面。

    (5)???? View 頁面利用既定接口,將結果顯示給客戶端。

    4.3 分頁顯示IssueMVC模式實現

    下面以分頁顯示所有 Issue 為例,說明上述各邏輯層之間是如何配合以完成既定操作。

    (1)???? 客戶端向服務器提交 URL 請求: http://localhost:8000/issuecontrol/issueAction.do

    (2)???? ActionServlet 通過 RequestProcessor 將請求提交到 IssueAction

    (3)???? Action 判斷此次的請求類型為顯示,參數 action = “view” ;通過 HttpServletRequest.getParameter 方法取得當前頁碼 viewPage ;假如 viewPage 為空,則當前頁碼為 1 ;設定每頁顯示的行數 pageSize = 8 ;調用 IssueBean.getIssueByPage(new Page(pageNum,pageSize)) 方法,將結果封裝到一個 PageView 對象 selectPageView 中;調用 httpServletRequest.setAttribute 方法將結果放到 HttpServletRequest 中;返回一個 ActionMapping 對象,內包含目標映射 viewIssue 指向 IssueList.jsp ,將控制權交還給 RequestProcessor IssueBean.getIssueByPage 方法是通過調用 IssueDAO.getIssueByPage 方法完成其業務邏輯的。

    (4)???? RequestProcessor 將頁面導向 IssueList.jsp

    (5)???? IssueList.jsp 將結果顯示在客戶端。

    Action 中的代碼塊示例如下:

    ??? String viewPage=httpServletRequest.getParameter("viewPage");

    ??? int pageNum=1;

    ??? String address = "viewIssue";

    ??? // 查看所有的 Issue

    ??? if(("view".equals(action)) || (action == null)) {

    ????? address = "viewIssue";

    ????? if((viewPage!= null)&&(viewPage.length()!= 0)){

    ??????? pageNum = Integer.parseInt(viewPage);

    ????? }

    ????? int pageSize=8;

    ????? //1. 先進行參數分析

    ????? //2. 下面調用邏輯層方法得到顯示的對象

    ????? PageView selectPageView=IssueBean.getIssueByPage(new Page(pageNum,pageSize));

    ????? //3. 放到 request 中然后轉發

    ????? httpServletRequest.setAttribute("items",selectPageView.getItems());

    ????? httpServletRequest.setAttribute("selectPageView",selectPageView);

    ????? httpServletRequest.setAttribute("action",action);

    }

    posted on 2005-01-27 14:48 eamoi 閱讀(2676) 評論(2)  編輯  收藏 所屬分類: Java畢業設計文檔

    評論:
    # re: MVC設計模式的Struts技術實現(2) 2005-04-16 23:51 | LILY
    后面的章節呢?  回復  更多評論
      
    # re: MVC設計模式的Struts技術實現(2) 2005-04-18 09:58 | eamoi
    不是在blog上貼全了嘛.  回復  更多評論
      
    主站蜘蛛池模板: 欧洲精品成人免费视频在线观看| 亚洲人配人种jizz| 亚洲乱码中文字幕综合234| 精品国产一区二区三区免费看| 2021久久精品免费观看| 222www在线观看免费| 4444www免费看| 91精品视频免费| 国产一卡2卡3卡4卡无卡免费视频 国产一卡二卡3卡四卡免费 | 中国国语毛片免费观看视频| 特黄特色的大片观看免费视频| 特级aa**毛片免费观看| 特色特黄a毛片高清免费观看| 又硬又粗又长又爽免费看| 中美日韩在线网免费毛片视频| 一级毛片a免费播放王色电影 | 亚洲天堂一区在线| 亚洲91精品麻豆国产系列在线| 亚洲娇小性xxxx| 亚洲av午夜电影在线观看| 美女扒开屁股让男人桶爽免费| 一级毛片在线免费视频| 成人免费无码H在线观看不卡| a级片免费在线播放| 三级网站免费观看| 久久久久久夜精品精品免费啦| 精品免费人成视频app| 成人片黄网站A毛片免费| 在线永久免费观看黄网站| 亚洲国产精品成人网址天堂| 亚洲午夜久久久久久久久电影网 | 免费A级毛片无码免费视| 国产精品极品美女免费观看| 亚洲高清最新av网站| 亚洲国产成人片在线观看| 亚洲香蕉免费有线视频| 中文字幕乱码亚洲精品一区| 色网站在线免费观看| 亚洲精品免费在线观看| 国产一卡2卡3卡4卡2021免费观看| 国产精品国产免费无码专区不卡|