项目的总结(一)
关键词 敏捷开发
一前言
那几个月正是学习各种令人愉快的开放技术的时候,主要是围绕敏捷开发这玩意。
读了重构,测试驱动开发的艺术两本书。
把玩了两个小框架junit,mockito
学习项目构建的maven,持续集成的jenkins等工具,主要是读《maven 实战》一书,特别值得一提的是,书年代有点早,那时jenkins还是hudson,这导致的问题的,搭建maven和hudson的持续集成环境时,因为maven版本是3了,与hudson这老玩意合不上,new project老是报错,百度,甚至FQ上谷歌不得其解,好几天后网上闲逛时无意间发现它改名为jenkins了,那简直是坑爹。
学完之后,妥妥的要练手,叫上两小伙伴,开始构建一个某博客系统,我负责整体的设计和部分开发,并引入了敏捷开发这一看起来高大上的东东。
二 项目
项目是简单的n层架构
view---action---service---dao--mysql
这是最终的一个分层,前期设计时action和service之间还加了一层facade层,正是facade设计模式,但后来去除了,
dao层本来用的hibernate,但hibernate封装得太厉害了,反而失去了灵活,那时正在玩mybatis,又改选了mybatis,可是mybatis还是很笨重,各种配置也很多,总觉得不爽,最后,重构了一下自己以前写的持久层框架durable(也有持久的意思,随便百度的一个单词。。改天写个它的由来。。),这玩意虽然小,但是够用,本身就是按照约定优于配置写的,完全不要配置文件。或许功能不多,但是用在这里正好,数据库开始用的是oracle,这玩意也是大家伙,改用mysql后,轻松多了。
这一系列改动,其实是走出了一个软件开发里最大的弊病之一,过度设计
下一篇文章将具体总结关于过度设计的教训,这里略过不提。
三关于项目里的某些的小体会,基本就是敏捷开发了
maven
暑假实习时接触的一个项目,用的是ant做项目构建,我遇到新词总喜欢搜搜,自然就搜到了maven,ant的一个改进版,花了一周啃完maven实战一书,感觉非常棒,就是纠结的是后来用maven上瘾了,管理包之类的太方便了,特别是集成一个jetty(一个小的服务器,类似tomcat),编码测试时tomcat都可以抛弃了,而且持续集成工具jenkins天生支持maven项目,赞。不过上瘾了,下来就难了,现随便弄个项目就想用maven。。谨防过度设计,也别过度使用工具,杀鸡别用牛刀。。。就一两个jar的项目,搞个普通的java project就够了,maven配置也要时间,何必呢。。
测试
bug是个无法根治的问题,测试也没亦无法,但测试可以减少后期的bug,记得在此项目之前的项目,经常遇到的情形就是,调试界面,报空指针,费老大劲从界面一层层往下调试,最后发现bug在于dao层sql语句拼错了。。如果在写dao前用测试驱动,或者写dao后加个单元测试,后面这个bug就基本不会有了。这就是测试可以减少后期bug。。测试驱动更好^-^
结对编程
敏捷开发提倡结对编程,开始总觉得两个大男人坐一起肩并肩敲代码有点小不对劲,,,其实一男一女最好了,可惜妹子一般不做后台开发,更愿意做做界面之类的。。唉
这个是源于我的组员都没学过敏捷开发的东西,尤其是测试驱动开发,甚至测试都没写过,为了教他,我想到了结对编程,带着他用测试驱动,先给他讲了那个界面报空指针,bug却出在sql语句的事情(其实就是他的亲身经历,这个bug也是我给他解决的,复习一下),我说他敲,写了个小模块,然后他就知道为啥要写测试,甚至先写测试了,花了一个小时不到。
持续集成
之前的好几个项目的最大问题都是出现在最后集成的时候,每个人的模块勉强能用,一集成妥妥的各种问题,那时根本没有持续集成概念,甚至测试都没有,虽然项目最后集成的bug我能够解决,可随着项目规模增加,最后集成的状况越来越糟糕,这项目之前的那一个甚至差点无法交差,交的还是个被我强行打了各种补丁的残次品,有些地方还是硬编码的假数据。。。
然后由实习时看到的tdd一词,逐渐开始接触敏捷开发,持续集成一词也进入了我的眼睛,特别是看了maven实战一书,里面的hudson,现在叫jenkins的持续集成工具和svn被我玩了几次后,我自然的就把持续集成,引入项目来了。
为此我搭建了maven+jenkins+svn+apache的项目管理服务器,由于组员并不在一个局域网,我还特意弄了个域名,虽然没有服务器,但用nat123做了个动态域名绑定,让组员可以用域名通过网络访问建立在我电脑里的项目管理服务器,持续集成就这么上了。
数据库倒是没弄成远程,我的解决方案是,把mysql之类装在linux虚拟机里,配置全部弄好,每人拷一份镜像,一旦数据库sql脚本有更新,从svn同步下sql脚本,运行一下就行了,后来自己又把svn,jenkins也丢进去了,以后就是重装系统,也没必要在本机重装各种玩意了。
今天文章就写到这,关于敏捷开发的东东,还会有一篇随笔。。