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

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

1,076

Published on

Published in: Technology, Design
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,076
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
20
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 社区项目开发的问题以及未来的建议
    TonyDeng
    http://friendfeed.com/tonydeng
    http://twitter.com/wolfdeng
    http://delicious.com/wolf.deng
    http://wolfchina.blogbus.com
  • 2. 目前表现出来的问题
    开发人员天天加班赶进度,但是出来产品,还是不放心
    多个项目对同一个数据库的表做操作,容易产生错误数据以及逻辑混乱
    多项目组合作不顺畅,REST服务不够明确
    缺乏版本控制
    项目中依赖的第三方的jar混乱
    太依赖MyEclipse来做内部项目间的依赖管理
    代码架构混乱,高耦合低内聚
    页面与数据库耦合太紧,业务逻辑更多的由前端展现层的javascript和持久层的SQL来维护,中间的业务逻辑层只是做的一个左手交右手的工作
    文档不清晰
  • 3. 我们的目标
    建立一个开放的服务平台
    建立一个高性能,可扩展,健壮的网站
    团队更好的协作和分享
    让工作更有效率
    把工作变成兴趣
    提高自我修养,实现个人价值
    公司与个人双赢
  • 4. 解决方案
    关键的思路:
    专注
    关注点分离
    开发团队拆分方式改变,让每个人都发挥自己擅长的技能,更专注于自己的领域
    开发人员必须进行单元测试
    使用Maven进行项目的生命周期管理、依赖管理
    使用Subversion官方推荐的trunk、branches、tags的方式来管理项目的版本
  • 5. 团队拆分方案
    按技术拆分
    优点:
    专注
    测试驱动
    容易低耦合,高内聚,关注点分离
    对技术研究的更透彻
    更容易形成规范和风格
    更容易技术积累
    更容易扩展和优化
    缺点:
    对团队成员有较高的要求
    沟通成本相对较高
  • 6. 常规的技术拆分方式以及需要掌握的技能
    数据访问层(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
  • 7. 拆分后的工作流程
    所有成员一起听取业务需求
    所有成员共同进行需求分析,确定系统架构,以及各层的技术选型
    项目负责人创建项目
    根据产品提供的UseCase以及页面原型,
    数据访问层的成员和DBA一起确定数据库模型,定义Dao的接口
    业务逻辑层的成员规划REST资源的URI,定义Service的接口以及领域模型
    展示层的成员定义ViewBean,串联项目的PageFlow
    各层通过单元测试、压力测试等各种测试方式来验证开发的成果
    通过依赖注入等方式将各个模块合并起来
    项目合并后,整体测试
    交付测试部门测试
  • 8. 使用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包发布
  • 9. 使用Subversion管理软件版本
    通过软件版本,我们能够得知我们每次发布和更新都做了些什么。
    Subversion官方推荐使用trunk,branches,tags这种方式来管理软件的版本,而且大多数使用Subversion的开源项目也是这么来做的。GoogleCode等SubVersion服务提供者也是使用这种方式来管理软件版本
    trunk
    项目的主要开发版本。
    在这里存放的永远是正在开发的代码,是不稳定的代码。
    branches
    当我们在某个项目开发之后,需要对这个项目进行紧急的修改,而且不能等待正在进行的项目开发完毕,那么我们需要在branches上建立一个分支来进行项目的紧急的修改和发布。
    tags
    这里存放的我们已经发布过的版本,这里的版本都是经过测试的稳定版本。
    如果我们需要建立分支,那么就需要在这里选择相应的版本来建立分支
  • 10. 谢谢!

×