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

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

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

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

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

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

    目標(biāo)

    完成情況

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

    完成較好。

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

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

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

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

    過(guò)程和管理實(shí)施

    有待提高。

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

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

    3. 在實(shí)施中比較缺乏必要的文檔支持,如設(shè)計(jì)文檔等;同時(shí)各層的接口定義也出現(xiàn)較多問(wèn)題,導(dǎo)致一些開(kāi)發(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開(kāi)發(fā)中可能遇到的各種常見(jiàn)問(wèn)題的解決方案),有一定學(xué)習(xí)曲線,但是有其它MVC框架基礎(chǔ)的開(kāi)發(fā)人員可以較快上手;

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

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

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

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

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

    待解決問(wèn)題

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

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

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

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

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

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

    3.         對(duì)于很多問(wèn)題都需要經(jīng)過(guò)各層間的討論來(lái)確定;

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

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

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

    7.         一些開(kāi)源軟件的使用需要比較小心,如iBatisnull的問(wèn)題等,如果處理不當(dāng)會(huì)花費(fèi)較多的人力物力,需要技術(shù)較強(qiáng)的人對(duì)開(kāi)源軟件花費(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)生不良影響;

    待解決問(wèn)題:

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

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

    四、持久層總結(jié)

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

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

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

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

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

    待解決問(wèn)題:

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

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

     

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

    評(píng)論

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

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

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

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

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

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

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

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

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

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

    1。通過(guò)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。開(kāi)放的插件體系,能提供各種需要,如eclipse,clover,site,package,test等

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

    # re: 項(xiàng)目中spring分層開(kāi)發(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)心它的語(yǔ)法問(wèn)題, ibatis則不然。  回復(fù)  更多評(píng)論   

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

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

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

    待解決問(wèn)題
    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分層開(kāi)發(fā)的總結(jié) 2006-04-05 15:27 pesom

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

    # re: 項(xiàng)目中spring分層開(kāi)發(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分層開(kāi)發(fā)的總結(jié) 2007-03-23 16:45 StormSpire

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

    # re: 項(xiàng)目中spring分層開(kāi)發(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中的每一步足跡。除非特別說(shuō)明,所有文章均為本blog作者原創(chuàng),如需轉(zhuǎn)載請(qǐng)注明出處和原作者,如用于商業(yè)目的,需跟作者本人聯(lián)系。
    歡迎大家訪問(wèn):

    常用鏈接

    留言簿(16)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    相冊(cè)

    收藏夾

    java技術(shù)

    人間百態(tài)

    朋友們的blog

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲毛片在线免费观看| 亚洲欧美不卡高清在线| 亚洲六月丁香六月婷婷色伊人| 亚洲一区电影在线观看| 亚洲AV无码一区二区三区牲色 | 精品一区二区三区高清免费观看 | 在线播放亚洲精品| 久久久久久av无码免费看大片| 桃子视频在线观看高清免费视频| 99久久精品日本一区二区免费| 国产日产成人免费视频在线观看| 中文字幕专区在线亚洲| 亚洲第一网站免费视频| 国产亚洲精品AAAA片APP| 中文在线免费视频| 亚洲精品免费网站| 亚洲狠狠爱综合影院婷婷| 亚洲av色福利天堂| 亚洲国产美女精品久久久| 99精品全国免费观看视频..| 国产又大又粗又长免费视频 | 国产一级一片免费播放i| 国产亚洲免费的视频看| 亚洲H在线播放在线观看H| 日韩在线视频播放免费视频完整版 | 亚洲aⅴ无码专区在线观看| 国产精品免费久久久久电影网| 精品免费人成视频app| 免费人成视频在线观看不卡| 亚洲人成在线观看| 在线观看亚洲视频| 中文字幕成人免费视频| 免费女人18毛片a级毛片视频| 亚洲美女视频一区二区三区| 日韩a毛片免费观看| 免费人成网站在线观看10分钟| 伊人亚洲综合青草青草久热| 日本亚洲免费无线码| 免费人成黄页在线观看日本| 国产在线观看www鲁啊鲁免费| 亚洲无线电影官网|