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

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

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

    項(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)目內(nèi)共享,這樣能在碰到同樣問題時(shí)快速解決。現(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. 測試1.0版已發(fā)布,目前開發(fā)11版,完善分頁功能和采用更好的驗(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àn)。

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

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

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

    1.         SpringMVC是一個(gè)簡潔、標(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.         頁面工作量很大,特別是需要比較復(fù)雜javascript的頁面;

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

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

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

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

    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ù)類型分析簡單,造成數(shù)據(jù)庫設(shè)計(jì)對(duì)業(yè)務(wù)層產(chǎn)生不良影響;

    待解決問題:

    1.         溝通不夠,需要建立溝通渠道,是否可以有專門的場合和時(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.  持久層的測試該如何進(jìn)行,才能真的有用;

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

     

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

    評(píng)論

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

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

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

    呵呵,主要不是數(shù)據(jù)庫的問題。我們的DAO采用middlegen +velocity的代碼自動(dòng)生成工具完成,寫些普通的CRUD的測試代碼,基本不會(huì)錯(cuò)。由于沒有業(yè)務(wù)邏輯,測試的意義就不那么大。  回復(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ù)庫,而且不用關(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ù)庫,并且設(shè)計(jì)的思想沒有按照OO原則的,用ibatis; 如果要求不高,而且是重新設(shè)計(jì)數(shù)據(jù)庫的,建議用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)論排行榜

    主站蜘蛛池模板: 久久久久免费看黄a级试看| 777亚洲精品乱码久久久久久 | 热99RE久久精品这里都是精品免费| 亚洲精品无码成人片久久不卡| 久久久无码精品亚洲日韩蜜臀浪潮| 不卡精品国产_亚洲人成在线| 日韩免费高清视频| 男女做羞羞的事视频免费观看无遮挡| 在线毛片片免费观看| 一区免费在线观看| 爱情岛亚洲论坛在线观看| 中文字幕无码精品亚洲资源网久久| 亚洲国产天堂久久综合网站| 亚洲人成伊人成综合网久久久| 亚洲国产aⅴ综合网| 日韩免费a级在线观看| 免费看韩国黄a片在线观看| 97在线视频免费| 毛片在线播放免费观看| 男女一边桶一边摸一边脱视频免费| 综合一区自拍亚洲综合图区| 亚洲欧美日韩综合久久久久 | 最近最新MV在线观看免费高清| 91精品全国免费观看含羞草 | 亚洲高清无在码在线电影不卡| 亚洲成AV人片在线观看WWW| 亚洲色欲一区二区三区在线观看| 久久亚洲精品无码观看不卡| 国产精品亚洲mnbav网站| 亚洲伊人久久综合影院| 国产亚洲?V无码?V男人的天堂| 五月天婷亚洲天综合网精品偷| 免费又黄又爽又猛的毛片 | 亚洲成a∧人片在线观看无码| 亚洲精品无码永久在线观看男男| 中文字幕亚洲码在线| 国产亚洲人成在线播放| 思思久久99热免费精品6| 国产精品免费久久久久影院| 三根一起会坏掉的好痛免费三级全黄的视频在线观看 | 成人性生交大片免费看中文|