社区项目开发的问题以及未来的建议
Upcoming SlideShare
Loading in...5
×
 

社区项目开发的问题以及未来的建议

on

  • 1,376 views

 

Statistics

Views

Total Views
1,376
Views on SlideShare
774
Embed Views
602

Actions

Likes
0
Downloads
20
Comments
0

4 Embeds 602

http://wolfchina.blogbus.com 599
http://www.slideshare.net 1
http://cc.bingj.com 1
http://www.blogbus.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    社区项目开发的问题以及未来的建议 社区项目开发的问题以及未来的建议 Presentation Transcript

    • 社区项目开发的问题以及未来的建议
      TonyDeng
      http://friendfeed.com/tonydeng
      http://twitter.com/wolfdeng
      http://delicious.com/wolf.deng
      http://wolfchina.blogbus.com
    • 目前表现出来的问题
      开发人员天天加班赶进度,但是出来产品,还是不放心
      多个项目对同一个数据库的表做操作,容易产生错误数据以及逻辑混乱
      多项目组合作不顺畅,REST服务不够明确
      缺乏版本控制
      项目中依赖的第三方的jar混乱
      太依赖MyEclipse来做内部项目间的依赖管理
      代码架构混乱,高耦合低内聚
      页面与数据库耦合太紧,业务逻辑更多的由前端展现层的javascript和持久层的SQL来维护,中间的业务逻辑层只是做的一个左手交右手的工作
      文档不清晰
    • 我们的目标
      建立一个开放的服务平台
      建立一个高性能,可扩展,健壮的网站
      团队更好的协作和分享
      让工作更有效率
      把工作变成兴趣
      提高自我修养,实现个人价值
      公司与个人双赢
    • 解决方案
      关键的思路:
      专注
      关注点分离
      开发团队拆分方式改变,让每个人都发挥自己擅长的技能,更专注于自己的领域
      开发人员必须进行单元测试
      使用Maven进行项目的生命周期管理、依赖管理
      使用Subversion官方推荐的trunk、branches、tags的方式来管理项目的版本
    • 团队拆分方案
      按技术拆分
      优点:
      专注
      测试驱动
      容易低耦合,高内聚,关注点分离
      对技术研究的更透彻
      更容易形成规范和风格
      更容易技术积累
      更容易扩展和优化
      缺点:
      对团队成员有较高的要求
      沟通成本相对较高
    • 常规的技术拆分方式以及需要掌握的技能
      数据访问层(DAO)
      Ibatis、Hibernate、JDBC、JNDI、JPA、JTA
      Oracle、MySQL、PostgreSQL 、SQL优化
      Key-ValueStorage、NoSQL
      半个DBA
      业务逻辑层(Business Logic)
      SpringIOC、AOP、JMS
      Restlet、Jersey、RESTeasy、ApacheCFX
      MemCached、Terracotta
      Design Pattern 、DDD (Domain-Driven Design领域驱动设计)
      REST、SOA、ROA
      Http
      展示层(MVC & UI)
      Struts、WebWork、SpringMVC
      Velocity、FreeMarker、JSTL、JSF
      JavaScript 、JQuery、Dojo、Prototype 、RIA、Widget
      HttpCache、JavaScriptCache
    • 拆分后的工作流程
      所有成员一起听取业务需求
      所有成员共同进行需求分析,确定系统架构,以及各层的技术选型
      项目负责人创建项目
      根据产品提供的UseCase以及页面原型,
      数据访问层的成员和DBA一起确定数据库模型,定义Dao的接口
      业务逻辑层的成员规划REST资源的URI,定义Service的接口以及领域模型
      展示层的成员定义ViewBean,串联项目的PageFlow
      各层通过单元测试、压力测试等各种测试方式来验证开发的成果
      通过依赖注入等方式将各个模块合并起来
      项目合并后,整体测试
      交付测试部门测试
    • 使用Maven管理项目
      建议使用多模块模式来管理项目
      club-rest-project
      club-domain-model
      定义jaxb注解的domainmodelobject或者通过xslschema定义domainmodelobject
      club-dao
      依赖club-domain-model模块
      定义dao的interface,生成dao的javadoc
      club-dao-impl
      依赖club-domian-model,club-dao
      club-dao的实现,sqlmap,Dao的测试
      club-rest-api
      定义rest service interface,生成restservice 的javadoc以及restresource的URI说明文档
      club-rest-impl
      依赖club-domain-model,club-dao,club-dao-impl
      restapi的实现,业务逻辑处理,定义restresource,业务逻辑测试
      club-rest-agent
      依赖club-domain-model
      club-rest-api的实现,代理操作restresource,resource 测试
      club-rest-webapp
      依赖club-domain-model,club-dao,club-dao-impl,club-rest-api,club-rest-impl
      通过配置文件整合依赖的项目,打成war包发布
      club-web-project
      club-web-component
      依赖club-domain-model,club-rest-api,club-rest-agetn
      社区的MVC,用户权限管理
      club-webapp
      依赖club-domain-model,club-rest-api,club-rest-agent,club-web-component
      通过配置文件整合依赖的项目,打成war包发布
    • 使用Subversion管理软件版本
      通过软件版本,我们能够得知我们每次发布和更新都做了些什么。
      Subversion官方推荐使用trunk,branches,tags这种方式来管理软件的版本,而且大多数使用Subversion的开源项目也是这么来做的。GoogleCode等SubVersion服务提供者也是使用这种方式来管理软件版本
      trunk
      项目的主要开发版本。
      在这里存放的永远是正在开发的代码,是不稳定的代码。
      branches
      当我们在某个项目开发之后,需要对这个项目进行紧急的修改,而且不能等待正在进行的项目开发完毕,那么我们需要在branches上建立一个分支来进行项目的紧急的修改和发布。
      tags
      这里存放的我们已经发布过的版本,这里的版本都是经过测试的稳定版本。
      如果我们需要建立分支,那么就需要在这里选择相应的版本来建立分支
    • 谢谢!