社区项目开发的问题以及未来的建议<br />TonyDeng<br />http://friendfeed.com/tonydeng<br />http://twitter.com/wolfdeng<br />http://delicious....
目前表现出来的问题<br />开发人员天天加班赶进度,但是出来产品,还是不放心<br />多个项目对同一个数据库的表做操作,容易产生错误数据以及逻辑混乱<br />多项目组合作不顺畅,REST服务不够明确<br />缺乏版本控制<br />项目...
我们的目标<br />建立一个开放的服务平台<br />建立一个高性能,可扩展,健壮的网站<br />团队更好的协作和分享<br />让工作更有效率<br />把工作变成兴趣<br />提高自我修养,实现个人价值<br />公司与个人双赢<br />
解决方案<br />关键的思路:<br />专注 <br />关注点分离<br />开发团队拆分方式改变,让每个人都发挥自己擅长的技能,更专注于自己的领域<br />开发人员必须进行单元测试<br />使用Maven进行项目的生命周期管理、依赖...
团队拆分方案 <br />按技术拆分<br />优点:<br />专注<br />测试驱动<br />容易低耦合,高内聚,关注点分离<br />对技术研究的更透彻<br />更容易形成规范和风格<br />更容易技术积累<br />更容易扩展和...
常规的技术拆分方式以及需要掌握的技能<br />数据访问层(DAO)<br />Ibatis、Hibernate、JDBC、JNDI、JPA、JTA<br />Oracle、MySQL、PostgreSQL 、SQL优化<br />Key-Va...
拆分后的工作流程<br />所有成员一起听取业务需求<br />所有成员共同进行需求分析,确定系统架构,以及各层的技术选型<br />项目负责人创建项目<br />根据产品提供的UseCase以及页面原型,<br />数据访问层的成员和DBA一...
使用Maven管理项目<br />建议使用多模块模式来管理项目<br />club-rest-project<br />club-domain-model<br />定义jaxb注解的domainmodelobject或者通过xslschema...
使用Subversion管理软件版本<br />通过软件版本,我们能够得知我们每次发布和更新都做了些什么。<br />Subversion官方推荐使用trunk,branches,tags这种方式来管理软件的版本,而且大多数使用Subversi...
谢谢!<br />
Upcoming SlideShare
Loading in …5
×

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

1,103
-1

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,103
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
20
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

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

    Clipping is a handy way to collect important slides you want to go back to later.

×