2014年的项目的总结(一)

关键词 敏捷开发

一前言

8月份,那时正式学习各种令人愉快的开放技术的时候,主要是围绕敏捷开发这玩意。

读了重构,测试驱动开发的艺术两本书。

把玩了两个小框架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也丢进去了,以后就是重装系统,也没必要在本机重装各种玩意了。

今天文章就写到这,关于敏捷开发的东东,还会有一篇随笔。。

时间: 2024-12-24 09:17:55

2014年的项目的总结(一)的相关文章

2014年的项目的总结(二) 谨防过度设计 别为显示技术而搞复杂 杀鸡焉用牛刀?

14年最后一个项目无疑收获巨大,自己掌握的很多东西都得到了检验,而其中暴露出来的问题更让我得到教训,特别是开始走入的过度设计的误区,为了显示技术什么复杂用什么,现在想想真是后背发凉.这样的经历,像我这样的新手估计很容易犯吧. 上图 开始的架构 一开始做设计时,为了统一所谓的对外接口,解决耦合问题,防止action层与service层多对多的复杂关系,使用façade(外观模式)将对应模块的多个service做了下轻封装,想象中的层次关系是左边这样的,将左边换成右边,怎么看都是右边更顺眼,所以加了

如何做好一个好的项目负责人

对于项目负责人本身没有太多的经验,只是在2014年以项目负责人的角色完整的带着5个人做完一个一个项目.并且,在这个项目期间还开始了另外一个项目,总结的有些乱,想到哪说到哪,不过都是自己的真实体会. 1 项目开始阶段: 首先对项目的基本需求有一个大概的认识.但是,最终达到什么效果,这需要项目组成员共同讨论决定.在进行讨论的时候会产生很多想法,但是一开始的时候,大家也可能没有想法.最为项目负责人,需要对项目需求有个总体的把握,充分发动每个人的长处.毕竟不是个人都对项目开始的设计有兴趣,项目负责人需要

2014年.net程序员年终总结

2014年经历了3家公司,感觉这一年工作不怎么顺利,在2013年1月进入一家外企从事软件架构设计.开发测试.部署实施的相关工作,在2013年感觉工作很充实,在2014年由于项目的原因被迫去做项目维护,有点象什么客服中心感觉很无聊,于是就跳槽了,进入中国本土一家人才外包的一家小公司,还是外包到华为.当时的title是sharepoint高级开发工程师,为了了解一下华为的工作环境也就try了一下,干了3个月在转正前HR突然告诉我说试用期不过,原因是我没有项目经理的能力.所以没办法被迫辞职,只能继续找

Android 开源项目分类汇总

目前包括: Android 开源项目第一篇--个性化控件(View)篇  包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar.TextView.ScrollView.TimeView.TipView.FlipView.ColorPickView.GraphView.UI Style.其他Android 开源项目第二篇--工具库篇  包括依赖注入.图片缓存.网络请求.数据库 ORM 工具包.Andro

Android常用酷炫控件(开源项目)github地址汇总

转载一个很牛逼的控件收集贴... 第一部分 个性化控件(View) 主要介绍那些不错个性化的 View,包括 ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar.TextView.ScrollView.TimeView.TipView.FlipView.ColorPickView.GraphView.UI Style 等等. 一.ListView android-pulltorefresh一个强大的拉动

Android 开源项目分类汇总(转)

## 第一部分 个性化控件(View)主要介绍那些不错个性化的 View,包括 ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar.TextView.ScrollView.TimeView.TipView.FlipView.ColorPickView.GraphView.UI Style 等等. #### 一.ListView1. android-pulltorefresh  一个强大的拉动刷新开源项目

Linux平台项目中时间相关内容

由Linux内核提供的基本时间服务是计算自国际标准时间公元1970年1月1日00:00:00以来经过的秒数,以time_t类型表示,被称为"日历时间",time_t通常定义为一个int型或long型的量. 日历时间有几个典型的特性: 以国际标准时间而非本地时间计时. 可自动进行转换,例如变换到夏时制. 用一个time_t量保存时间和日期. 程序中获取日历时间使用time()函数,函数原型是: #include <time.h> time_t time(time_t *cal

GitHub上优秀的开源项目(转载)

转载出处:https://github.com/Trinea/android-open-project 第一部分 个性化控件(View) 主要介绍那些不错个性化的 View,包括 ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView. ProgressBar.TextView.ScrollView.TimeView.TipView.FlipView.ColorPickView. GraphView.UI Style 等等. 一.

Android 开源项目android-open-project优秀项目解析 ZXing, github-android,Notes,weicuiyuan和gnucash-and,photup

主要介绍那些Android还不错的完整项目,目前包含的项目主要依据是项目有意思或项目分层规范比较好. Linux 项目地址:https://github.com/torvalds/linux Android 项目地址:https://android.googlesource.com/ 或https://github.com/android 以上两个项目,不解释 (1) ZXing 二维码扫描工具 项目地址:https://github.com/zxing/zxing 或https://code.