SlideShare a Scribd company logo
1 of 10
社区项目开发的问题以及未来的建议 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 这里存放的我们已经发布过的版本,这里的版本都是经过测试的稳定版本。 如果我们需要建立分支,那么就需要在这里选择相应的版本来建立分支
谢谢!

More Related Content

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

Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程
appollo0312
 
新浪高可用数据库平台及日常管理经验介绍
新浪高可用数据库平台及日常管理经验介绍新浪高可用数据库平台及日常管理经验介绍
新浪高可用数据库平台及日常管理经验介绍
helbreathszw
 
一个“兼职Dba”的数据库运维经验谈
一个“兼职Dba”的数据库运维经验谈一个“兼职Dba”的数据库运维经验谈
一个“兼职Dba”的数据库运维经验谈
Liang Xie
 
Jswebapps
JswebappsJswebapps
Jswebapps
jay li
 
应用开发一般工作流程和注意
应用开发一般工作流程和注意应用开发一般工作流程和注意
应用开发一般工作流程和注意
cucued
 
掌星 移动互联网开发笔记-Vol002
掌星 移动互联网开发笔记-Vol002掌星 移动互联网开发笔记-Vol002
掌星 移动互联网开发笔记-Vol002
rainx1982
 
D2-ETao-show
D2-ETao-showD2-ETao-show
D2-ETao-show
leneli
 
高可用数据库平台及日常管理经验介绍
高可用数据库平台及日常管理经验介绍高可用数据库平台及日常管理经验介绍
高可用数据库平台及日常管理经验介绍
uptodate
 
高可用数据库平台架构及日常管理经验介绍.ppt
高可用数据库平台架构及日常管理经验介绍.ppt高可用数据库平台架构及日常管理经验介绍.ppt
高可用数据库平台架构及日常管理经验介绍.ppt
Frank Cai
 
Ajax设计技术
Ajax设计技术Ajax设计技术
Ajax设计技术
yiditushe
 
Django敏捷开发 刘天斯
Django敏捷开发 刘天斯Django敏捷开发 刘天斯
Django敏捷开发 刘天斯
liuts
 
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发
leneli
 

Similar to 社区项目开发的问题以及未来的建议 (20)

Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程
 
Web端交互逻辑抽象的实践—运营h5页面和逻辑自动生成利器
Web端交互逻辑抽象的实践—运营h5页面和逻辑自动生成利器Web端交互逻辑抽象的实践—运营h5页面和逻辑自动生成利器
Web端交互逻辑抽象的实践—运营h5页面和逻辑自动生成利器
 
新浪高可用数据库平台及日常管理经验介绍
新浪高可用数据库平台及日常管理经验介绍新浪高可用数据库平台及日常管理经验介绍
新浪高可用数据库平台及日常管理经验介绍
 
一个“兼职Dba”的数据库运维经验谈
一个“兼职Dba”的数据库运维经验谈一个“兼职Dba”的数据库运维经验谈
一个“兼职Dba”的数据库运维经验谈
 
Jswebapps
JswebappsJswebapps
Jswebapps
 
应用开发一般工作流程和注意
应用开发一般工作流程和注意应用开发一般工作流程和注意
应用开发一般工作流程和注意
 
掌星 移动互联网开发笔记-Vol002
掌星 移动互联网开发笔记-Vol002掌星 移动互联网开发笔记-Vol002
掌星 移动互联网开发笔记-Vol002
 
專案分層架構 twMVC#18
專案分層架構 twMVC#18專案分層架構 twMVC#18
專案分層架構 twMVC#18
 
twMVC#18 | 專案分層架構
twMVC#18 | 專案分層架構twMVC#18 | 專案分層架構
twMVC#18 | 專案分層架構
 
淘宝网前端开发面试题
淘宝网前端开发面试题 淘宝网前端开发面试题
淘宝网前端开发面试题
 
D2-ETao-show
D2-ETao-showD2-ETao-show
D2-ETao-show
 
高可用数据库平台及日常管理经验介绍
高可用数据库平台及日常管理经验介绍高可用数据库平台及日常管理经验介绍
高可用数据库平台及日常管理经验介绍
 
高可用数据库平台架构及日常管理经验介绍.ppt
高可用数据库平台架构及日常管理经验介绍.ppt高可用数据库平台架构及日常管理经验介绍.ppt
高可用数据库平台架构及日常管理经验介绍.ppt
 
Ajax设计技术
Ajax设计技术Ajax设计技术
Ajax设计技术
 
JIRA Live DEMO 2020 v17
JIRA Live DEMO 2020 v17JIRA Live DEMO 2020 v17
JIRA Live DEMO 2020 v17
 
Django敏捷开发 刘天斯
Django敏捷开发 刘天斯Django敏捷开发 刘天斯
Django敏捷开发 刘天斯
 
Open erp python-快速数据库应用开发
Open erp python-快速数据库应用开发Open erp python-快速数据库应用开发
Open erp python-快速数据库应用开发
 
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发
 
實踐 Clean Architecture(實作高可用性的軟件架構)
實踐 Clean Architecture(實作高可用性的軟件架構)實踐 Clean Architecture(實作高可用性的軟件架構)
實踐 Clean Architecture(實作高可用性的軟件架構)
 
常用Js框架比较
常用Js框架比较常用Js框架比较
常用Js框架比较
 

More from Tony Deng

《我们如何工作》—质量保障
《我们如何工作》—质量保障《我们如何工作》—质量保障
《我们如何工作》—质量保障
Tony Deng
 
《我们如何工作》- 产品经理和工程师如何有效沟通
《我们如何工作》- 产品经理和工程师如何有效沟通《我们如何工作》- 产品经理和工程师如何有效沟通
《我们如何工作》- 产品经理和工程师如何有效沟通
Tony Deng
 
技术债务的形成
技术债务的形成技术债务的形成
技术债务的形成
Tony Deng
 
我们不了解的计算机世界(二)
我们不了解的计算机世界(二)我们不了解的计算机世界(二)
我们不了解的计算机世界(二)
Tony Deng
 
我们不了解的计算机世界(一)--Unix目录结构的来历
我们不了解的计算机世界(一)--Unix目录结构的来历我们不了解的计算机世界(一)--Unix目录结构的来历
我们不了解的计算机世界(一)--Unix目录结构的来历
Tony Deng
 
实时任务调度
实时任务调度实时任务调度
实时任务调度
Tony Deng
 
节约内存:Instagram的redis实践
节约内存:Instagram的redis实践节约内存:Instagram的redis实践
节约内存:Instagram的redis实践
Tony Deng
 

More from Tony Deng (20)

一页纸项目管理
一页纸项目管理一页纸项目管理
一页纸项目管理
 
Docker at the gate
Docker at the gateDocker at the gate
Docker at the gate
 
《我们如何工作》—质量保障
《我们如何工作》—质量保障《我们如何工作》—质量保障
《我们如何工作》—质量保障
 
《我们如何工作》- 产品经理和工程师如何有效沟通
《我们如何工作》- 产品经理和工程师如何有效沟通《我们如何工作》- 产品经理和工程师如何有效沟通
《我们如何工作》- 产品经理和工程师如何有效沟通
 
我们为何工作--找到正确的工作方式
我们为何工作--找到正确的工作方式我们为何工作--找到正确的工作方式
我们为何工作--找到正确的工作方式
 
SDN介绍
SDN介绍SDN介绍
SDN介绍
 
漫谈职业规划
漫谈职业规划漫谈职业规划
漫谈职业规划
 
一次Http请求过程分析
一次Http请求过程分析一次Http请求过程分析
一次Http请求过程分析
 
图解Git
图解Git图解Git
图解Git
 
一次Code review引发的思考
一次Code review引发的思考一次Code review引发的思考
一次Code review引发的思考
 
My sql迁移总结
My sql迁移总结My sql迁移总结
My sql迁移总结
 
一次项目的探险旅程
一次项目的探险旅程一次项目的探险旅程
一次项目的探险旅程
 
Scrum敏捷开发模型
Scrum敏捷开发模型Scrum敏捷开发模型
Scrum敏捷开发模型
 
Shoutv 冯晓东
Shoutv 冯晓东Shoutv 冯晓东
Shoutv 冯晓东
 
技术债务的形成
技术债务的形成技术债务的形成
技术债务的形成
 
我们不了解的计算机世界(二)
我们不了解的计算机世界(二)我们不了解的计算机世界(二)
我们不了解的计算机世界(二)
 
HBase
HBaseHBase
HBase
 
我们不了解的计算机世界(一)--Unix目录结构的来历
我们不了解的计算机世界(一)--Unix目录结构的来历我们不了解的计算机世界(一)--Unix目录结构的来历
我们不了解的计算机世界(一)--Unix目录结构的来历
 
实时任务调度
实时任务调度实时任务调度
实时任务调度
 
节约内存:Instagram的redis实践
节约内存:Instagram的redis实践节约内存:Instagram的redis实践
节约内存:Instagram的redis实践
 

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