周志勇
摘要:傳統(tǒng)ssh架構(gòu)的應(yīng)用開發(fā),配置繁瑣,學(xué)習(xí)成本大,開發(fā)效率不高。為了解決此問題,基于ssm框架,以共享筆記應(yīng)用為場景設(shè)計(jì)了一套簡化的系統(tǒng),實(shí)現(xiàn)業(yè)務(wù)功能的同時(shí),也可作為同類型應(yīng)用開發(fā)的二次框架,大大提高開發(fā)效率,并且易于維護(hù)與擴(kuò)展。
關(guān)鍵詞:SSM框架;效率;共享筆記;可擴(kuò)展性
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2016)34-0129-02
1 概述
現(xiàn)代后端應(yīng)用開發(fā)中,由于業(yè)務(wù)迭代周期極大的加快,不斷會(huì)有新的業(yè)務(wù)需求需要加入到原有項(xiàng)目中,同時(shí)業(yè)務(wù)復(fù)雜多變,模塊的增多導(dǎo)致了相互間的關(guān)系變得越加復(fù)雜。因此,如何維護(hù)原有項(xiàng)目的穩(wěn)定性,提高項(xiàng)目的可擴(kuò)展性及提升項(xiàng)目的開發(fā)效率顯得尤為重要。傳統(tǒng)的后端開發(fā)框架如struts、hibernate等配置過程繁瑣,開發(fā)效率已經(jīng)慢慢難以快速的跟上新興業(yè)務(wù)的發(fā)展了。本文基于流行的java后端開發(fā)框架spring、springMVC、mybatis等,為解決多人共享筆記進(jìn)行協(xié)作的需求,設(shè)計(jì)了一套共享筆記應(yīng)用,通過對(duì)原有框架功能的進(jìn)一步封裝,改善了框架開發(fā)中配置流程多且復(fù)雜的問題,通過封裝后的api可以大大提高同類型相關(guān)應(yīng)用的開發(fā)效率,縮減開發(fā)成本,促進(jìn)業(yè)務(wù)快速迭代發(fā)展。
2 需求分析
隨著生活節(jié)奏的加快,人們越來越傾向于應(yīng)用高效率的工具去輔助日常生活。筆記就是很重要的一個(gè)場景。傳統(tǒng)的紙筆方式有攜帶不方便、不易于備份等不足,且不易于多人查看共同協(xié)作修改。針對(duì)此問題,設(shè)計(jì)了一個(gè)在線的筆記系統(tǒng),多用戶可以通過聯(lián)網(wǎng)的終端,在線記錄并調(diào)整自己的筆記,數(shù)據(jù)備份在服務(wù)端,能夠?qū)崿F(xiàn)隨時(shí)隨地、永不丟失,同時(shí)方便地實(shí)現(xiàn)多人協(xié)作共享,標(biāo)記歷史版本修改。此場景下的具體的業(yè)務(wù)需求是:1)多用戶能夠在線訪問歷史筆記;2)多用戶方便地修改歷史筆記,并記錄修改歷史 3.多用戶隨時(shí)創(chuàng)建新的筆記。系統(tǒng)擴(kuò)展性方面,需要支持業(yè)務(wù)的可伸縮性,使用rest結(jié)構(gòu)的api訪問方式,支持基本的get,post,delete,put等http方法。同時(shí)模塊之間要求盡可能松耦合,項(xiàng)目業(yè)務(wù)迭代不影響之前的業(yè)務(wù)穩(wěn)定運(yùn)行,并且能夠?qū)崿F(xiàn)快速迭代開發(fā)。
3 系統(tǒng)整體架構(gòu)
前端使用基本的jsp與html, css, javascript做為ui交互,url分發(fā)使用springmvc控制,同時(shí),使用spring作為中間的管家角色,負(fù)責(zé)模塊之間的解耦與注入操作,數(shù)據(jù)庫端,采用mysql作為業(yè)務(wù)數(shù)據(jù)存儲(chǔ)介質(zhì),通過mybatis提供的同RDBMS的交互功能,與前端的ui操作進(jìn)行交互。同時(shí)使用spring的aop機(jī)制進(jìn)行數(shù)據(jù)庫事務(wù)的控制,將所有涉及DB的操作進(jìn)行事務(wù)控制,保證數(shù)據(jù)庫操作的原子性、一致性、隔離性、持久性。
4 技術(shù)分析
[1]Spring是一個(gè)十分優(yōu)秀的開源框架,其 核 心 模 塊 為 IOC 容 器 和AOP,IOC提供了依賴注入功能,可以大大減輕對(duì)象之間的耦合關(guān)系。[2]AOP為面向切面編程,關(guān)注點(diǎn)是將某一通用的需求功能從不相關(guān)的類之中分離出來, 同時(shí)能夠使得很多類共享這一個(gè)通用的行為。[3]依靠spring這兩個(gè)核心功能,在web應(yīng)用開發(fā)中可以極大減輕開發(fā)工作量和提高開發(fā)效率。本系統(tǒng)中的核心spring配置如下:
<!-- 自動(dòng)掃描@controller注解的類作為控制器 -->
[4]SpringMVC主要在此起到請(qǐng)求地址分發(fā)處理的作用,將前端用戶提交的操作數(shù)據(jù)及路徑請(qǐng)求交給后端配置的相應(yīng)的處理方法,完成數(shù)據(jù)處理后返回對(duì)應(yīng)視圖或者相應(yīng)格式的數(shù)據(jù)。其核心處理方式是通過注解的形式引入,使用@RequestMapping進(jìn)行請(qǐng)求地址的分發(fā);@Controller標(biāo)注相應(yīng)處理類為控制類,通過spring的自動(dòng)掃描功能加入實(shí)例池供后續(xù)調(diào)用;@RequestBody標(biāo)注處理方法返回內(nèi)容格式化為json對(duì)象;@Repository注解標(biāo)注dao層類為與數(shù)據(jù)源綁定的接口類,同樣通過spring進(jìn)行依賴注入獲取操作數(shù)據(jù)庫的示例對(duì)象;@Service注解標(biāo)注該類為對(duì)應(yīng)的邏輯實(shí)現(xiàn)類,通過接口的方式解耦,在需要的時(shí)候注入到相應(yīng)類中使用。
[5]Mybatis是一個(gè)持久層的優(yōu)秀框架,提供較為完整的jdbc封裝,減少了大量的重復(fù)代碼。本系統(tǒng)中其主要配置如下:
<!-- DAO接口所在包名,Spring會(huì)自動(dòng)查找其下的類 -->
<!-- 事務(wù)管理 -->
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
5 數(shù)據(jù)庫設(shè)計(jì)
考慮到共享筆記的需求,定義了如下的表結(jié)構(gòu),記錄用戶修改記錄、當(dāng)前筆記最新內(nèi)容等信息。
6 各模塊設(shè)計(jì)
系統(tǒng)采用分層設(shè)計(jì)的思路。從數(shù)據(jù)層一直到最終用戶交互層分為下面幾個(gè)模塊。
1)數(shù)據(jù)持久DAO層。數(shù)據(jù)持久層的痛點(diǎn)是移除冗余的代碼,對(duì)于流程化的操作應(yīng)該盡可能的進(jìn)一步分裝成一步調(diào)用,以提高開發(fā)效率。本系統(tǒng)中通過將mybatis、spring的整合,完整的抽離出了Mapping層的配置,使得數(shù)據(jù)層接口的開發(fā)調(diào)用更為簡單。
2) 實(shí)體Entity層。實(shí)體在實(shí)際工程中的本體就是簡單的類對(duì)象,適用于java項(xiàng)目中就是簡單的java對(duì)象也叫pojo(Plain Ordinary Java Object)。通過將數(shù)據(jù)庫中的關(guān)鍵字段數(shù)據(jù)綁定到實(shí)體的成員變量中并將其序列化,可以方便地實(shí)現(xiàn)數(shù)據(jù)的傳輸。
3) DAO與Entity關(guān)系映射Mapping層。完成數(shù)據(jù)庫表結(jié)構(gòu)與實(shí)體間的綁定的映射,維持?jǐn)?shù)據(jù)交互過程的穩(wěn)定性。本系統(tǒng)中將其與spring的依賴注入功能結(jié)合,自動(dòng)根據(jù)配置關(guān)系注入數(shù)據(jù)庫操作實(shí)體類。
4) 用戶業(yè)務(wù)邏輯Service層。實(shí)際的業(yè)務(wù)開發(fā)中最常打交道的地方,通過定義一系列與前端交互的接口,依靠spring的注入功能,將相應(yīng)的實(shí)現(xiàn)類方法以動(dòng)態(tài)綁定的形式綁定到接口,實(shí)現(xiàn)業(yè)務(wù)代碼的可重用與松耦合。
5) 控制Controller層。控制層是前端用戶交互與后端數(shù)據(jù)處理的橋梁,攔截所有用戶請(qǐng)求地址,交付后端對(duì)應(yīng)的hanlder方法,并控制最后處理結(jié)果返回給前端用戶,是不可或缺的一部分。
6) 前端交互UI層。用戶交互層,考慮到多人共享筆記的需求,筆記編輯頁面需要記錄用戶登錄狀態(tài)并與后端交互中一并發(fā)送至后端處理。具體采用jsp,html,css,json等技術(shù)完成前端的實(shí)現(xiàn)。
7 總結(jié)
本系統(tǒng)結(jié)合實(shí)際的共享筆記應(yīng)用場景,從簡化軟件開發(fā)流程的角度出發(fā),設(shè)計(jì)并實(shí)現(xiàn)了一套完整的系統(tǒng),主要成果為:系統(tǒng)設(shè)計(jì)分層更加清晰,dao層、entity層、mapping層、service層、controller層,相對(duì)原生框架,整個(gè)框架適合進(jìn)行類似應(yīng)用的二次開發(fā),極大地提高了代碼的重用性與開發(fā)效率;封裝了業(yè)務(wù)開發(fā)中的最基本的增刪改查操作,通過封裝后的api,減少了原生框架的重復(fù)性配置,可以快速進(jìn)行業(yè)務(wù)的迭代。實(shí)際效果證明,此系統(tǒng)具備較好的可擴(kuò)展性,易于作為二次定制開發(fā)框架,能夠一定程度上簡化軟件開發(fā)流程,提高開發(fā)人員的開發(fā)效率。
不過在前端交互方面設(shè)計(jì)的還不夠完善,目前只支持原始的頁面設(shè)計(jì)交互,后期考慮進(jìn)一步簡化前端的框架設(shè)計(jì)使得前端ui開發(fā)更加便捷,同時(shí)集成權(quán)限控制、安全模塊等。
參考文獻(xiàn):
[1] 王艷清,陳紅.基于 SSM 框架的智能 web 系統(tǒng)研發(fā)設(shè)計(jì)[J].計(jì)算機(jī)工程與設(shè)計(jì),2012, 33(12): 4751-4757.
[2] 王蓉,周駿,周維,等. Spring AOP 技術(shù)在輕量級(jí) Web 系統(tǒng)中的應(yīng)用[J].微計(jì)算機(jī)信息, 2007 (27): 231-232.
[3] Arthur J, Azadegan S. Spring framework for rapid open source J2EE Web application development: a case study[C]//Sixth International Conference on Software Engineering, Artificial Intelligence, Networking and Parallel/Distributed Computing and First ACIS International Workshop on Self-Assembling Wireless Network. IEEE, 2005: 90-95.
[4] 薛峰,梁鋒,徐書勛,等.基于 Spring MVC 框架的 Web 研究與應(yīng)用[J].合肥工業(yè)大學(xué)學(xué)報(bào):自然科學(xué)版,2012,35(3):337-340.