項(xiàng)目中spring分層開發(fā)的總結(jié)

          對(duì)spring框架和開發(fā)模式進(jìn)行了驗(yàn)證。大家有什么問題或好的建議,請(qǐng)回復(fù),大家一起討論!

          一、 項(xiàng)目目標(biāo)及完成情況

          目標(biāo)

          完成情況

          技術(shù)驗(yàn)證和推廣

          完成較好。

          1. 共有7人實(shí)際參與項(xiàng)目開發(fā),我們引入maven2作為構(gòu)建工具,eclipse作為ide環(huán)境。大家都能在很短的時(shí)間初始化項(xiàng)目,并快速掌握各自需要的技術(shù)(如springspring mvc等)進(jìn)行開發(fā)。

          2. 對(duì)分層開發(fā)的模式也進(jìn)行了探討,證明它是可行的:可以各層并行開發(fā),提高開發(fā)效率;而通過分層可以隔離關(guān)注點(diǎn),使得各層開發(fā)人員可以只關(guān)注本層相關(guān)技術(shù)和接口,減輕開發(fā)人員負(fù)擔(dān),提高效率。

          3. 在項(xiàng)目活動(dòng)中碰到一些技術(shù)難點(diǎn),我們將解決方案文檔化,然后項(xiàng)目?jī)?nèi)共享,這樣能在碰到同樣問題時(shí)快速解決?,F(xiàn)在還是碰到問題才解決,以后需要建立預(yù)研機(jī)制,較早發(fā)現(xiàn)可能出現(xiàn)的難點(diǎn),盡早解決,避免對(duì)項(xiàng)目進(jìn)展產(chǎn)生影響。

          4. 平臺(tái)還處于建設(shè)階段,對(duì)項(xiàng)目的支持還不夠,需要形成一些通用的組件。

          過程和管理實(shí)施

          有待提高。

          1. 測(cè)試1.0版已發(fā)布,目前開發(fā)1。1版,完善分頁(yè)功能和采用更好的驗(yàn)證方式。由于對(duì)規(guī)范開發(fā)的項(xiàng)目周期估計(jì)不足,加上管理上的一些問題,導(dǎo)致項(xiàng)目有所延期,需要對(duì)實(shí)際的項(xiàng)目開發(fā)進(jìn)行量化分析,確立比較準(zhǔn)確的人員和時(shí)間計(jì)劃。

          2. UC文檔規(guī)范和編碼規(guī)范等的引入,為項(xiàng)目提供了較好的支持。

          3. 在實(shí)施中比較缺乏必要的文檔支持,如設(shè)計(jì)文檔等;同時(shí)各層的接口定義也出現(xiàn)較多問題,導(dǎo)致一些開發(fā)瓶頸的出現(xiàn),這都需要在正式迭代中改進(jìn)。

          系統(tǒng)功能

          完成較好。

          1. 完成了UC文檔確定的功能點(diǎn),頁(yè)面美觀,使用方便,能給用戶較好的頁(yè)面體驗(yàn)。

          2. 采用較好的面向?qū)ο笤O(shè)計(jì),能提供一定的可重用性和擴(kuò)展性。

          二、展現(xiàn)層總結(jié)

          經(jīng)驗(yàn)與教訓(xùn)

          1.         SpringMVC是一個(gè)簡(jiǎn)潔、標(biāo)準(zhǔn)的MVC實(shí)現(xiàn),結(jié)構(gòu)清晰,功能強(qiáng)大(主要體現(xiàn)在對(duì)日常WEB開發(fā)中可能遇到的各種常見問題的解決方案),有一定學(xué)習(xí)曲線,但是有其它MVC框架基礎(chǔ)的開發(fā)人員可以較快上手;

          2.         根據(jù)業(yè)務(wù)功能盡早確定接口,接口由展現(xiàn)層確定,由業(yè)務(wù)層實(shí)現(xiàn);

          3.         合理選擇Controller可以減少開發(fā)工作量,前提是充分理解每種Controller的處理機(jī)制及其回調(diào)方法細(xì)節(jié),Controller的編寫更多的精力主要花在校驗(yàn)、出錯(cuò)處理上;

          4.         頁(yè)面工作量很大,特別是需要比較復(fù)雜javascript的頁(yè)面;

          5.         UI的流轉(zhuǎn)設(shè)計(jì)等對(duì)于Controller的編寫和業(yè)務(wù)層的接口有著很大的影響,應(yīng)盡早明確,否則會(huì)產(chǎn)生較大的返工;

          6.         展現(xiàn)層開發(fā)可以與業(yè)務(wù)層同步進(jìn)行,推薦確定接口后,就編寫業(yè)務(wù)層接口的mock實(shí)現(xiàn),放在展現(xiàn)層的test包內(nèi),同時(shí)寫單獨(dú)的測(cè)試用spring配置文件;

          待解決問題

          1.         Controller是否應(yīng)寫test case,本次開發(fā)未做;

          2.         如何減少校驗(yàn)的工作量,對(duì)于有業(yè)務(wù)邏輯的服務(wù)端校驗(yàn)如何實(shí)現(xiàn),是否需要采用一些validator框架,如sunJEFvalidator組件,目前我們進(jìn)行了研究,通過使用commons validator組件能夠較方便的實(shí)現(xiàn)validator;

          三、業(yè)務(wù)層總結(jié)

          經(jīng)驗(yàn)與教訓(xùn):

          1.         SpringiBatis的應(yīng)用還是很成功的,學(xué)習(xí)曲線比較平滑,好的框架好掌握;

          2.         比較重視測(cè)試,編寫很多測(cè)試案例,并頻繁使用maven運(yùn)行所有測(cè)試,使得問題能夠及早發(fā)現(xiàn),保證了各層能夠快速成功集成

          3.         對(duì)于很多問題都需要經(jīng)過各層間的討論來確定;

          4.         接口由展現(xiàn)層定義,由業(yè)務(wù)層實(shí)現(xiàn);

          5.         持久層數(shù)據(jù)模型和領(lǐng)域模型是有區(qū)別的,但簡(jiǎn)單的情況下可以合二為一;

          6.         Fa?ade模式還是很有價(jià)值的;

          7.         一些開源軟件的使用需要比較小心,如iBatisnull的問題等,如果處理不當(dāng)會(huì)花費(fèi)較多的人力物力,需要技術(shù)較強(qiáng)的人對(duì)開源軟件花費(fèi)一定時(shí)間進(jìn)行源碼級(jí)的研究,才能找出較好的解決方案;

          8.         認(rèn)識(shí)到設(shè)計(jì)的重要性,需要對(duì)前置、后置條件等進(jìn)行分析;

          9.         數(shù)據(jù)類型分析簡(jiǎn)單,造成數(shù)據(jù)庫(kù)設(shè)計(jì)對(duì)業(yè)務(wù)層產(chǎn)生不良影響;

          待解決問題:

          1.         溝通不夠,需要建立溝通渠道,是否可以有專門的場(chǎng)合和時(shí)間討論項(xiàng)目中的進(jìn)度和問題;

          2.         計(jì)劃不明確,對(duì)于要完成哪些功能,完成到什么程度,沒有明確的定義,需要設(shè)置里程碑目標(biāo)。在正式迭代開始前,要明確每次迭代的任務(wù)和目標(biāo),需要結(jié)合業(yè)務(wù)需求進(jìn)行計(jì)劃;

          四、持久層總結(jié)

          經(jīng)驗(yàn)與教訓(xùn):

          1.  通過代碼生成工具,能夠大大提高開發(fā)效率;

          2.  工具使用者要求對(duì)ibatissql比較了解;

          3.  在使用過程中對(duì)工具進(jìn)行了完善,這對(duì)正式使用工具提供了保證;

          4.  與業(yè)務(wù)層的接口,應(yīng)該由業(yè)務(wù)層確定,由持久層實(shí)現(xiàn),而不是由持久層決定;

          待解決問題:

          1.  持久層的測(cè)試該如何進(jìn)行,才能真的有用;

          2.  一些通用功能如分頁(yè)代碼生成,還在開發(fā)中;

           

          posted on 2006-01-16 13:57 pesome 閱讀(6025) 評(píng)論(12)  編輯  收藏 所屬分類: Spring+Struts+Hibernate

          評(píng)論

          # re: 項(xiàng)目中spring分層開發(fā)的總結(jié) 2006-01-16 15:36 agile

          呵呵,不錯(cuò).
          對(duì)于持久層測(cè)試,建議采用嵌入式DB,象Apache的Derby.  回復(fù)  更多評(píng)論   

          # re: 項(xiàng)目中spring分層開發(fā)的總結(jié) 2006-01-16 23:28 pesome

          呵呵,主要不是數(shù)據(jù)庫(kù)的問題。我們的DAO采用middlegen +velocity的代碼自動(dòng)生成工具完成,寫些普通的CRUD的測(cè)試代碼,基本不會(huì)錯(cuò)。由于沒有業(yè)務(wù)邏輯,測(cè)試的意義就不那么大。  回復(fù)  更多評(píng)論   

          # re: 項(xiàng)目中spring分層開發(fā)的總結(jié) 2006-01-17 20:38 Jet Geng

          摟主可否介紹一下在項(xiàng)目中使用maven的經(jīng)驗(yàn)。謝謝了先  回復(fù)  更多評(píng)論   

          # re: 項(xiàng)目中spring分層開發(fā)的總結(jié) 2006-01-17 21:15 風(fēng)往南吹

          你小子也不在群里發(fā)言了。。。 :)  回復(fù)  更多評(píng)論   

          # re: 項(xiàng)目中spring分層開發(fā)的總結(jié) 2006-01-18 09:32 pesome

          maven使用很方便的,關(guān)于maven的文章網(wǎng)上也能搜到。個(gè)人認(rèn)為,它的亮點(diǎn)有三:

          1。通過pom管理jar文件,能構(gòu)建本組織自己的jar repository,對(duì)所有項(xiàng)目進(jìn)行統(tǒng)一支持。
          2。管理項(xiàng)目間的依賴,包括依賴傳遞,能比較方便的對(duì)項(xiàng)目進(jìn)行項(xiàng)目級(jí)細(xì)分,如我們分為db,core,web,config等多個(gè)項(xiàng)目,還可以方便的按模塊添加項(xiàng)目。
          3。開放的插件體系,能提供各種需要,如eclipse,clover,site,package,test等

          實(shí)際使用較多的就是 mvn eclipse:eclipse,mvn package,mvn test。
          我現(xiàn)在也是剛開始用,感覺還是不錯(cuò)的,推薦大家使用,maven網(wǎng)址:http://maven.apache.org  回復(fù)  更多評(píng)論   

          # re: 項(xiàng)目中spring分層開發(fā)的總結(jié) 2006-01-20 10:31 Frankies

          個(gè)人建議:
           1 .表現(xiàn)層不要用spring mvc, 改用struts。
           2.持久層改為Hibernate,因?yàn)樗遣贿m合類型的數(shù)據(jù)庫(kù),而且不用關(guān)心它的語法問題, ibatis則不然。  回復(fù)  更多評(píng)論   

          # re: 項(xiàng)目中spring分層開發(fā)的總結(jié) 2006-01-20 11:13 pesome

          呵呵,spring mvc也是很不錯(cuò)的mvc框架,matt在spring live里也挺推崇的,我們用下來感覺也不錯(cuò)。ibatis和hibernate各有使用的范圍,據(jù)我所知很多大型的項(xiàng)目采用ibatis,因?yàn)樗袑?duì)sql的控制,而hibernate如果使用不當(dāng)會(huì)產(chǎn)生較多的性能問題。感謝建議!  回復(fù)  更多評(píng)論   

          # re: 項(xiàng)目中spring分層開發(fā)的總結(jié) 2006-04-05 15:02 daquan

          待解決問題
          2.如何減少校驗(yàn)的工作量,對(duì)于有業(yè)務(wù)邏輯的服務(wù)端校驗(yàn)如何實(shí)現(xiàn)
          ----------------------------------
          org.springframework.validation提供了驗(yàn)證框架,對(duì)一般的表單驗(yàn)證和validator一樣采用配置文件,對(duì)于業(yè)務(wù)邏輯相關(guān)的驗(yàn)證,我用如下做法,不知我理解的對(duì)不對(duì)。
          例如我的一個(gè)SimpleFormController

          public ModelAndView onSubmit(HttpServletRequest request,
          HttpServletResponse response, Object command,
          BindException errors) throws Exception {
          。。。。。。。。。。。。
          if (已經(jīng)存在相同的email地址的用戶) {
          errors.rejectValue("fieldName", "errorCode",
          getText("error.message.key",
          new Object[] {
          var1,var2}));
          return showForm(request, response, errors);
          。。。。。。。
          -----------------------------------
          其中g(shù)etText:
          public String getText(String msgKey, Object[] args) {
          return getMessageSourceAccessor().getMessage(msgKey, args);
          }

          jsp顯示錯(cuò)誤信息:
          <spring:bind path="user.*">
          <c:if test="${not empty status.errorMessages}">
          <div class="error">
          <c:forEach var="error" items="${status.errorMessages}">
          <c:out value="${error}" escapeXml="false"/><br />
          </c:forEach>
          </div>
          </c:if>
          </spring:bind>  回復(fù)  更多評(píng)論   

          # re: 項(xiàng)目中spring分層開發(fā)的總結(jié) 2006-04-05 15:27 pesom

          呵呵,非常感謝。這個(gè)問題我們后來解決了,就是這種方式,通過springmodule支持的commonvalidator  回復(fù)  更多評(píng)論   

          # re: 項(xiàng)目中spring分層開發(fā)的總結(jié) 2006-04-07 15:30 null

          這個(gè)是正解http://www.springframework.org/docs/MVC-step-by-step/Spring-MVC-step-by-step-Part-3.html

          public class PriceIncreaseValidator implements Validator { private int DEFAULT_MIN_PERCENTAGE = 0; private int DEFAULT_MAX_PERCENTAGE = 50; private int minPercentage = DEFAULT_MIN_PERCENTAGE; private int maxPercentage = DEFAULT_MAX_PERCENTAGE; /** Logger for this class and subclasses */ protected final Log logger = LogFactory.getLog(getClass()); public boolean supports(Class clazz) { return clazz.equals(PriceIncrease.class); } public void validate(Object obj, Errors errors) { PriceIncrease pi = (PriceIncrease) obj; if (pi == null) { errors.rejectValue("percentage", "error.not-specified", null, "Value required."); } else { logger.info("Validating with " + pi + ": " + pi.getPercentage()); if (pi.getPercentage() > maxPercentage) { errors.rejectValue("percentage", "error.too-high", new Object[] {new Integer(maxPercentage)}, "Value too high."); } if (pi.getPercentage() <= minPercentage) { errors.rejectValue("percentage", "error.too-low", new Object[] {new Integer(minPercentage)}, "Value too low."); } } } public void setMinPercentage(int i) { minPercentage = i; } public int getMinPercentage() { return minPercentage; } public void setMaxPercentage(int i) { maxPercentage = i; } public int getMaxPercentage() { return maxPercentage; }}
            回復(fù)  更多評(píng)論   

          # re: 項(xiàng)目中spring分層開發(fā)的總結(jié) 2007-03-23 16:45 StormSpire

          關(guān)于Ibatis 和 hibernate,一般是性能要求很高的或者使用現(xiàn)有的數(shù)據(jù)庫(kù),并且設(shè)計(jì)的思想沒有按照OO原則的,用ibatis; 如果要求不高,而且是重新設(shè)計(jì)數(shù)據(jù)庫(kù)的,建議用hibernate,通過hibernate來生成表結(jié)構(gòu)  回復(fù)  更多評(píng)論   

          # re: 項(xiàng)目中spring分層開發(fā)的總結(jié) 2007-03-26 10:34 pesome

          @StormSpire
          恩,這個(gè)也是我現(xiàn)在的建議。  回復(fù)  更多評(píng)論   

          <2006年1月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          導(dǎo)航

          統(tǒng)計(jì)

          公告

          主要記錄作者在學(xué)習(xí)java中的每一步足跡。除非特別說明,所有文章均為本blog作者原創(chuàng),如需轉(zhuǎn)載請(qǐng)注明出處和原作者,如用于商業(yè)目的,需跟作者本人聯(lián)系。
          歡迎大家訪問:

          常用鏈接

          留言簿(16)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊(cè)

          收藏夾

          java技術(shù)

          人間百態(tài)

          朋友們的blog

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 永丰县| 乌苏市| 遵义市| 元朗区| 内乡县| 寻甸| 亳州市| 南宁市| 涞水县| 土默特左旗| 榕江县| 万源市| 陇西县| 九龙县| 长乐市| 武乡县| 昭觉县| 上杭县| 格尔木市| 九龙县| 土默特左旗| 岳普湖县| 长宁县| 正定县| 梅河口市| 宣化县| 禹州市| 南木林县| 巢湖市| 陆河县| 辽阳县| 仪征市| 金沙县| 县级市| 延川县| 和静县| 城口县| 姚安县| 澄迈县| 利川市| 衢州市|