<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 來實現(xiàn) MVC 設計模式,以及在 Struts 的使用過程中如何構建清晰的系統(tǒng)架構以及實現(xiàn) WebForm 和代碼復用。這里我們假定一個 Project 、服務或者產品就是一個 Issue ;在每個 Issue 的開發(fā)周期內,當 Issue 在各個開發(fā)小組中流轉的時候會生成一個或多個任務稱為 IssueData ;每個 IssueData 都有相應的開始時間、結束時間和提交時間; IssueData 的結束時間和提交時間是可更改的,每次更改系統(tǒng)自動生成一個 Log 記錄這種更改。 LPMT 需要實現(xiàn)對上述 Issue IssueData Log 的顯示、管理和其他必要的功能。本人所在的三人小組將以 Java Hibernate Struts Framework 技術為依托實現(xiàn)上述需求。

    3.1 LPMT的用戶需求

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

    標識

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

    分類

    Y1.1

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

    明顯

    Y1.2

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

    明顯

    Y1.3

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

    明顯

    Y1.4

    issue 進度修改后自動給相關 TL 發(fā) e-mail

    明顯

    Y1.5

    可記錄 issue 原狀態(tài)及修改后狀態(tài)。

    明顯

    Y1.6

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

    明顯

    Y1.7

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

    報表。

    明顯

    Y1.8

    各部門完成各自進度后系統(tǒng)自動給相關人員發(fā) e-mail

    明顯

    Y1.9

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

    明顯

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

    3.2 LPMT的需求實現(xiàn)

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

    4-5.jpg?

    ?

    6-7.jpg

    ?

    8-9.jpg

    10-11.jpg

    第四章 LPMT中的MVC多層架構實現(xiàn)

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

    4.1 系統(tǒng)架構

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

    4.1.1 Data Persistence

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

    4.1.2 Logic

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

    4.1.3 Model

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

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

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

    Issuecontrol.action 包中的所有類都派生自 Action ,用于封裝具體的處理邏輯,調用 Logic 層的業(yè)務邏輯類,實現(xiàn)業(yè)務操作,讀寫 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 標簽庫實現(xiàn)控制和顯示邏輯。部分 View 代碼見附錄。

    4.2 MVC模式的實現(xiàn)邏輯

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

    12.jpg

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

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

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

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

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

    4.3 分頁顯示IssueMVC模式實現(xiàn)

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

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

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

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

    (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. 先進行參數(shù)分析

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

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

    ????? //3. 放到 request 中然后轉發(fā)

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

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

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

    }

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

    評論:
    # re: MVC設計模式的Struts技術實現(xiàn)(2) 2005-04-16 23:51 | LILY
    后面的章節(jié)呢?  回復  更多評論
      
    # re: MVC設計模式的Struts技術實現(xiàn)(2) 2005-04-18 09:58 | eamoi
    不是在blog上貼全了嘛.  回復  更多評論
      
    主站蜘蛛池模板: 亚洲人成网7777777国产| 0588影视手机免费看片| 亚洲精品成a人在线观看| 亚洲日本VA午夜在线电影| 女人被男人躁的女爽免费视频 | 亚洲人成人一区二区三区| 韩国免费a级作爱片无码| 亚洲无人区午夜福利码高清完整版| jizz18免费视频| 亚洲国产精品高清久久久| 最新国产乱人伦偷精品免费网站| 久久夜色精品国产嚕嚕亚洲av| 日本一区二区免费看| 亚洲天堂福利视频| 毛片高清视频在线看免费观看| 亚洲国产精品无码久久98| 日韩精品成人亚洲专区| 成在线人直播免费视频| 亚洲AV无码专区电影在线观看| 在线看无码的免费网站| 亚洲欧美日韩久久精品| 亚洲AV永久无码精品一区二区国产| 免费看一级高潮毛片| 久久精品亚洲综合专区| 中国xxxxx高清免费看视频| 亚洲色欲色欱wwW在线| 亚洲日本在线观看视频| 人妻18毛片a级毛片免费看| 亚洲精品无码专区久久久| 国产国产人免费视频成69堂| 亚洲AV成人片无码网站| 日本红怡院亚洲红怡院最新| 成人免费视频软件网站| 中国在线观看免费的www| 亚洲最大成人网色香蕉| 亚洲视频人成在线播放| 国产桃色在线成免费视频| 久久国产精品免费| 国产精品高清视亚洲一区二区| 亚洲中文字幕久久精品无码APP| 亚洲三级在线免费观看|