摘要:本文圍繞人力資源管理系統(tǒng)的設(shè)計與實現(xiàn),結(jié)合軟件工程的開發(fā)理論,根據(jù)部門外聘人力資源管理業(yè)務(wù)進(jìn)行系統(tǒng)需求分析,在AppFuse開源框架的基礎(chǔ)上,對Struts+Spring+Hibernate的Web開發(fā)流程做了深入的研究。
關(guān)鍵詞:人力資源管理系統(tǒng);MVC模式;開源框架
企業(yè)人力資源管理是企業(yè)管理的一個重要內(nèi)容,隨著時代的進(jìn)步,企業(yè)規(guī)模也逐漸擴(kuò)大。如何管理好企業(yè)內(nèi)部員工的信息,成為企業(yè)管理中的一個重要問題。建立一個界面友好、架構(gòu)設(shè)計合理的人力資源管理系統(tǒng)是十分必要的。它可以為部門進(jìn)行有效的人力資源管理,并為公司節(jié)約大量的人力、物力,減少工作中容易出現(xiàn)的一些問題。本系統(tǒng)的主要功能主要實現(xiàn)部門對外聘員工招聘管理、外聘員工薪金管理、項目資源管理、綜合信息查詢、報表生成等。使用該系統(tǒng)不僅可以方便部門人力資源的各層管理人員處理日常事務(wù),而且方便項目經(jīng)理采用外聘員工、人力資源秘書計算外聘員工薪金等工作。使用后期可在此基礎(chǔ)上擴(kuò)展本系統(tǒng),使之涵蓋業(yè)務(wù)管理的各個方面,形成更全面更完善的產(chǎn)品。
一、J2EE技術(shù)結(jié)構(gòu)
由眾多知名廠商共同制定的J2EE平臺規(guī)范利用了Java2平臺的技術(shù)優(yōu)勢,為企業(yè)整體解決方案的開發(fā)、部署和管理提供了一套完整的體系結(jié)構(gòu)。J2EE技術(shù)的基礎(chǔ)就是Java2平臺,不僅加強(qiáng)了該平臺中的許多優(yōu)點,還提供了對業(yè)務(wù)邏輯封裝的EJB組件技術(shù)、支持HTTP訪問的Servlets和JSP,以及XML的全面支持,另外它還定義了關(guān)于事務(wù)管理的JTA和JTS接口及保證消息傳遞的JMS服務(wù)等。
二、基于MVC系統(tǒng)模型的AppFuse框架
用AppFuse進(jìn)行開發(fā)通常有三種模式:“自上而下”、“自下而上”以及“混合模式”?!白陨隙隆笔怯蒍ava對象向數(shù)據(jù)庫對象創(chuàng)建的過程,比較符合面向?qū)ο蟮脑O(shè)計思維,但是為此要編寫大量的XDoclet的tag?!白韵露稀笔怯蓴?shù)據(jù)庫對象生成Java對象的過程,只需要提供數(shù)據(jù)庫表結(jié)構(gòu)即可。然而,對于較為復(fù)雜的系統(tǒng),尤其是類之間具有大量關(guān)聯(lián)的情形,仍然需要采用“自上而下”的創(chuàng)建模式。因此,在實際的項目開發(fā)中,將兩種模式進(jìn)行混合使用比較常見,這也就是“混合”模式。
三、基于Struts框架在人力資源管理系統(tǒng)實現(xiàn)中的應(yīng)用
1.人力資源管理系統(tǒng)的基本框架
本系統(tǒng)采用基于AppFuse的開發(fā)模式,可以生成60%左右的代碼,并且不同模塊代碼風(fēng)格一致,有利于開發(fā)人員快速上手。系統(tǒng)的各個子模塊之間功能獨立,可根據(jù)用戶的需要動態(tài)進(jìn)行組合,各個子模塊之間沒有直接耦合,而是通過數(shù)據(jù)庫之間的聯(lián)系由框架進(jìn)行組合,子模塊的修改只是模塊內(nèi)的局部修改,不會導(dǎo)致修改的蔓延,從而使系統(tǒng)的可維護(hù)能力大大提高,降低了系統(tǒng)開發(fā)的風(fēng)險。人力資源管理系統(tǒng)是基于AppFuse的三層體系結(jié)構(gòu),采用了Struts+Spring+Hibernate三種開源框架,使用了基于MVC模式的Struts的框架,并使用Hibernate進(jìn)行數(shù)據(jù)持久層操作,使用Spring對各個組件進(jìn)行依賴注射。人力資源管理系統(tǒng)共分三個層次:數(shù)據(jù)持久層、業(yè)務(wù)邏輯層、Web層。根據(jù)人力資源管理系統(tǒng)需求的相關(guān)內(nèi)容,系統(tǒng)總體模塊框圖如下頁圖所示。
2.人力資源管理系統(tǒng)的開發(fā)過程
人力資源管理系統(tǒng),主要實現(xiàn)對外聘員工所有相關(guān)信息的信息化管理和生成報表等功能。由于篇幅有限,這里僅對身份驗證、外聘員工招聘管理、綜合信息查詢和報表生成模塊說明系統(tǒng)的設(shè)計與實現(xiàn)。
(1)用戶界面設(shè)計。用戶界面是Web應(yīng)用和用戶交互的窗口。用戶界面可以向用戶輸出信息,也可以接收用戶的輸入信息。根據(jù)需求分析,可以制定出用戶界面,包括用戶界面的功能、與用戶交互的信息,以及用戶界面之間的相互切換關(guān)系。ActionForm Bean是Struts提供的表單數(shù)據(jù)傳輸對象,用于在視圖層和控制層之間傳遞HTML表單數(shù)據(jù)。控制層可以從ActionForm Bean中讀取用戶輸入的表單數(shù)據(jù),也可以把來自模型層的數(shù)據(jù)存放到ActionForm Bean中,然后把它返回給視圖。
(2)登錄驗證模塊設(shè)計。人力資源管理系統(tǒng)采用了AppFuse用戶管理,用到了容器管理的Form認(rèn)證方式。采用基于表單的登錄驗證方式,登錄請求由login.jsp處理。通過靜態(tài)應(yīng)用,login.jsp將登錄請求委派給loginForm.jsp處理。
login.jsp
容器啟動時,調(diào)用監(jiān)聽器StartupListener,初始化Spring上下文環(huán)境,設(shè)置DAO type,通過LookupDAOHibernate.getRoles取得角色信息,存于application scope中。接著調(diào)用UserCounterListener監(jiān)聽器,記錄用戶的登錄改變,然后通過容器Form認(rèn)證,將請求轉(zhuǎn)給login.jsp;Login.jsp靜態(tài)引用loginForm.jsp,由其進(jìn)行主要的權(quán)限認(rèn)證工作。loginForm.jsp表單提交后,將請求轉(zhuǎn)向/authorize,/authorize的請求被login servlet處理。
(3)外聘員工招聘模塊設(shè)計。在人力資源管理系統(tǒng)中,外聘員工招聘管理模塊是系統(tǒng)的重要組成部分,它提供了軟件開發(fā)經(jīng)理錄用外聘員工的相關(guān)功能。當(dāng)部門需要招聘外聘員工時,派遣公司會提供外聘人員簡歷,首先由部門人力資源秘書將外聘人員簡歷錄入至外聘員工簡歷庫。軟件開發(fā)經(jīng)理根據(jù)部門招聘員工的具體要求來篩選簡歷,并進(jìn)行首輪面試。通過面試的外聘員工正式進(jìn)入部門報到,部門為其申請辦公資源,員工等待進(jìn)入項目。項目經(jīng)理根據(jù)項目需求,進(jìn)行二次面試。符合項目組要求的外聘員工正式進(jìn)入部門項目組,不滿足要求的外聘員工等待其他項目。系統(tǒng)利用Spring聲明式的事務(wù)管理機(jī)制,系統(tǒng)的所有service類都聲明在applicationContext-service.xml中,該文件中包含有一個“txProxyTemplate”bean的聲明,它定義了基本事務(wù)策略。其他的service類從“txProxyTemplate”繼承,并可以“重寫”事務(wù)策略。
(4)綜合信息查詢模塊設(shè)計。系統(tǒng)在綜合信息查詢中,主要完成以下模塊的查詢工作:外聘員工查詢條件、人力資源秘書查詢條件、項目經(jīng)理查詢條件、軟件開發(fā)經(jīng)理查詢條件。這個查詢條件涉及多表關(guān)聯(lián),在系統(tǒng)數(shù)據(jù)量非常大的情況下,為了提高系統(tǒng)性能,必須對SQL語句進(jìn)行優(yōu)化,其中not in與not exists的用法就顯得格外重要。因為在子查詢中,not in對子查詢中的表執(zhí)行了一個全表遍歷。為了避免使用not in,在開發(fā)過程中通常采用外連接(Outer Joins)或not exists。系統(tǒng)采用的是Hibernate2進(jìn)行數(shù)據(jù)持久層操作,由于Hibernate2不支持外連接以及一些復(fù)雜的SQL語句,對于這種情況,系統(tǒng)采用創(chuàng)建視圖(Vi