`
hideto
  • 浏览: 2652004 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Rails程序开发的最大问题是代码规范

    博客分类:
  • Ruby
阅读更多
使用Rails开发大型复杂B2B应用一年了,这个项目目前开发人员达到近20人
现在感觉最痛苦的事情就是大家没有遵循统一的代码规范
我一直建议PM要设立一个项目架构师的角色,来统一大家的代码规范,但是PM不听
因为Ruby这种动态语言太灵活,大家各自写个各自的代码,相互之间很难看懂别人的代码
Controller、Model、View、Js、CSS等等文件目录的设立也是各模块小组之间各自为政
现在系统越来越复杂,各模块之间的协调和交互也越来越多
但是由于没有人来盯统一的代码规范和设计,大家的交流变得非常痛苦
换句话说,看见别人的代码和自己的代码风格迥异感觉很不爽
分享到:
评论
64 楼 刑天战士 2008-08-29  
其实关键是在人,很多时候,工具只能帮助人,但不能替人解决问题。

PS:这里面好多freewheel的……
63 楼 冉翔 2008-08-29  
<div class='quote_title'>woody_420420 写道</div>
<div class='quote_div'>
<div class='quote_title'>liusong1111 写道</div>
<div class='quote_div'><br/><span style='color: #ff0000;'>人太多了,</span><span style='text-decoration: line-through;'>代码也太多了,</span><span style='color: #ff0000;'>没法搞。</span><br/></div>
<br/><span style='color: #ff0000;'>我以为昨晚你早早就洗洗睡了。。。</span><br/>……<br/></div>
<p> </p>
<p>OMG </p>
<p> </p>
<p>ORZ</p>
<p> </p>
<p> 囧囧囧</p>
62 楼 liusong1111 2008-08-29  
hideto 写道
看来是业务模块划分不够好是一个原因
理想状态下A和B模块完全分离

如果是公用plugin或lib的设计,则需要各team leader参与review


如果开发任务太紧急,4~5人小团队的话人手肯定不够
说到底还是项目管理的事,不见得是Rails特有的弊端


nod,在邮件标题上分级?


61 楼 hideto 2008-08-29  
看来是业务模块划分不够好是一个原因
理想状态下A和B模块完全分离

如果是公用plugin或lib的设计,则需要各team leader参与review


如果开发任务太紧急,4~5人小团队的话人手肯定不够
说到底还是项目管理的事,不见得是Rails特有的弊端
60 楼 liusong1111 2008-08-29  
hideto在开会.
我们UI部门分了四个小组,两个业务开发组,一个基础设施和运维组,一个QA组,平均每个组5个人.
hideto提出的问题,我理解还是怎样高效的整体知识分享和反馈,这个职责原本应该在基础组里,可是基础组成员也有开发任务,精力和执行力度不够,不能全局实时负责.
具体的问题,等hideto会开完了,请他讲讲.
59 楼 jack 2008-08-29  
赫赫,别说多人团队,就我一个人的项目,都可以让代码动态动态再动态,结果过一周去看代码,绕不出来了。所以rails不合适多人团队是一个问题,另外还得要看团队成员是否做到恰到好处的问题。如果没有自控能力,rails和ruby可u不停的翻花样玩,都是没有问题的,不过后果吗...
58 楼 robbin 2008-08-29  
hideto,我觉得你们公司的RoR项目团队太大了。

我个人的体会是,用RoR开发,项目团队不需要太大,保持在5人规模以内比较合理,团队规模一大,比较容易失控。我个人觉得你们应该把团队拆分为5个小团队,每个小团队负责一个功能模块,相对隔离开。

不过Rails这个框架似乎并没有考虑过大规模团队协作的问题,DHH他们37signals也就4个程序员而已,在这方面,Rails似乎不如django,不像django那样可以轻松的划分模块,进行团队协作。

事实上我在两年前就下过这样的结论,认为Rails不适合大规模团队协作开发,这也是Rails在企业应用方面面临的比较大的缺陷之一。
57 楼 jack 2008-08-29  
刑天战士 写道
fnet 写道
PHP以及几乎所有的动态语言一样有这个问题.

我想是否可以这么认为:

这些语言还不是真正的工业语言


java一样有,而且不比动态语言少,我原来公司就是这样,看到那代码想揍人……



工业语言,为什么要如此之定义, 代码写的不好看,还是不是个人因素.应该说写代码的人不是工业人.
56 楼 neora 2008-08-29  
20人的RoR团队?够胆!
hideto果然是为RoR在中国商业领域探索道路的一代先驱...
55 楼 lsyong 2008-08-29  
很多时候团队里并不需要那么多人,但是领导觉得人多力量大,而且组建团队的时候根本没给下面人提建议的机会。比如我上家公司,一个项目拆成两块,每块一组人做,每组一个项目经理,有时还互相推任务,10多个人干了大半年,整得一团糟,而实际上那工作量,5个人足矣。
54 楼 刑天战士 2008-08-29  
fnet 写道
PHP以及几乎所有的动态语言一样有这个问题.

我想是否可以这么认为:

这些语言还不是真正的工业语言


java一样有,而且不比动态语言少,我原来公司就是这样,看到那代码想揍人……
53 楼 hideto 2008-08-29  
当然需要单元测试,但是仅仅测试是不够的
测试能保证功能,又如何保证设计和规范?
花花公子 写道
是单元测试重要还是代码规范重要?模块之间的相互调用我认为是单元测试重要,毕竟单元测试是代码的第一使用者。
如果是html,js,css,那么基本上要通过培训,code review来规范。

52 楼 QuakeWang 2008-08-29  
woody_420420 写道

2.象"Pair Programming"一样,来个"Team Programming"怎么样?每个星期一,选一个同学从自己的代码中挑一段代码,花20分钟给所有member解释什么的干活,然后,周一到周五就是娱乐时间,大家可以针对这段代码发表任何意见(格式,规范,性能。。。)。到下周一,此同学来总结,得到多少建议,他将接受哪些,不接受哪些。。。如果发现一些普遍问题,我们可以抽取出来形成团队的官方coding文档(变量命名,注释风格。。等等)。当然,我想的这个过程并不是要优化某一段代码,只是通过这个过程,同学们都能在一起交流关于coding规范,团队风格的总总问题。

我们以前也做过,不过不是挑自己的代码,而是挑别人的代码,可以是自己看不懂的,或是自己有更好解决方法的,也可以用团队quiz的方式来做,比如我之前翻译的一篇文章:
http://www.iteye.com/topic/200008
对于整个团队的风格,技术提升都有帮助。
51 楼 fnet 2008-08-29  
PHP以及几乎所有的动态语言一样有这个问题.

我想是否可以这么认为:

这些语言还不是真正的工业语言
50 楼 woody_420420 2008-08-29  
花花公子 写道
是单元测试重要还是代码规范重要?。

在我心中,我觉得都重要!如果要量化,我觉得是6/4开。单元测试6,代码规范4
49 楼 woody_420420 2008-08-29  
liusong1111 写道

人太多了,代码也太多了,没法搞。

我以为昨晚你早早就洗洗睡了。。。昨天躺床上一直想这个问题睡不着,胡思乱想了些如下内容:
1.确实,团队大了,项目规模大了,结队(频繁的结队)不是太现实。但是我觉得凡事只要“度”把握得合适,总会有所收获。比如,项目事太多,可以一个星期找个同学结队改一,两个bug。。。之类的。在这个过程中,我们可以逐步总结,积累。总会有更好的实践的。
2.象"Pair Programming"一样,来个"Team Programming"怎么样?每个星期一,选一个同学从自己的代码中挑一段代码,花20分钟给所有member解释什么的干活,然后,周一到周五就是娱乐时间,大家可以针对这段代码发表任何意见(格式,规范,性能。。。)。到下周一,此同学来总结,得到多少建议,他将接受哪些,不接受哪些。。。如果发现一些普遍问题,我们可以抽取出来形成团队的官方coding文档(变量命名,注释风格。。等等)。当然,我想的这个过程并不是要优化某一段代码,只是通过这个过程,同学们都能在一起交流关于coding规范,团队风格的总总问题。

说到底,我觉得要解决这个问题,拿我原来一同事的话来说:一定要“沟流,交通”!大家各自闷着写自己的代码肯定不行。叫一个牛b人指定一套规范,官方推广也不行。还是得从内而外。

七零八落的一些想法吧~现在还晕,没啥组织,大家将就看看,有啥意见使劲交流。

PS: 看到规范,就想了太多以至失眠。。。我想最主要的原因还是原来一家公司的经历: 项目组一同学惊现的一些诸如:btn_fu*k,iNoName。。。之类的代码,还有不堪入目的项目。。。往事阿~
48 楼 花花公子 2008-08-29  
是单元测试重要还是代码规范重要?模块之间的相互调用我认为是单元测试重要,毕竟单元测试是代码的第一使用者。
如果是html,js,css,那么基本上要通过培训,code review来规范。
47 楼 neodoxy 2008-08-29  
ltian 写道
火星叔叔马丁 写道
v教 主,俺也不说啥了,就是求你别再把好好的帖子弄成口水帖锁了...

你不知道Rails来扯什么代码规范

V Lord您自重


我恰恰认为口水帖都是象您这样的人的出现才产生的。就是论事,我只是对楼主提出的问题说了我的想法,当然表达这些想法不仅仅是针对楼主,而是对所有看帖对同样问题有兴趣的同行,至于我说得对与不对,也是技术方面的。至于你,我建议您多为论坛做些技术上有意义的事情,而不是成为论坛上的骂街能手,这对论坛的氛围和您个人都有好处。

群众的眼睛是雪亮的,您消停吧
46 楼 gigix 2008-08-28  
liusong1111 写道
人太多了,代码也太多了,没法搞。


超过10个developers的团队是令人不快的
因为我没办法一边做事一边听清楚另外10个人在说什么
如果是另外4个或者6个人就完全没问题
45 楼 liusong1111 2008-08-28  
gigix 写道
woody_420420 写道
我们可以在团队内部制订一个框架性的规范(不是面面俱到的模板),如果可能,尽量频繁交叉结对(共产主义?),如果发现代表性的问题,可以定期以邮件,会议的方式告知团队所有的成员。。。时间久了,我想团队内部自然而然可以形成特有的编码风格与规范。

这个,才是正道
结对
每天(或者两天,或者半天)轮换结对
所有人拥有所有代码
我们有一个实践:每天早上花10~20分钟,把昨天所有的修改svn diff出来,大家一起review一遍
这是在结对之外的team review
频率高,高到近乎实时的监督,才能有效
代码写出来之后两周才review的话,是不会有印象的


人太多了,代码也太多了,没法搞。

相关推荐

    rspec-rails-examples:RSpec速查表和Rails应用程序:了解如何从模型代码库中专业测试Rails应用程序

    了解如何从模型代码库中专业测试Rails应用程序对于那些想知道如何使用RSpec测试Rails应用程序的开发人员来说,这是一个简短而全面的参考。 在这里,您将找到带有详细文档的深入示例,这些文档详细说明了如何使用...

    rails6-api-starter:初学者应用程序,通过设计令牌身份验证开发Rails 6 API应用程序

    此应用程序使用rspec进行测试并保护监视更改并自动运行任何更改的规范。 bundle exec guard将启动防护并监视文件的更改。 bundle exec rspec将运行整个测试套件。 Simplecov也包含在代码覆盖率指标中,它将与测试...

    rspec-rails:适用于Rails 5+的RSpec

    在RSpec中,测试不仅仅是验证您的应用程序代码的脚本。 它们也是规范(或简称为spec ):用纯英语表示的有关应用程序行为的详细说明。 对于低于5.0的Rails,请使用 。 将用于Rails2.x。安装重要说明此自述文件/分支...

    jungle:使用Ruby on Rails构建的迷你电子商务应用程序。 建于Lighthouse Labs Web开发训练营的9-10周

    科技栈前端: ERB 后端: Ruby on Rails PostgreSQL测试: 规范水豚Poltergeist 创建于Lighthouse Labs网络开发新手训练营的第9周和第10周。演练客户可以将产品添加到他们的购物车中。客户在确认订单之前检查他们的...

    everybay_rails_second:Everyday Rails-RSpecによるRailsテスト入门の学习用2回目

    进行示例Rails 5.1应用程序: Aaron Sumner进行测试驱动开发的实用方法。 该存储库演示了对现有应用程序的增量测试,该测试从未经测试的代码库开始,直至模型,控制器,功能和请求规范。 每个章节的进度在此存储库...

    JAVA上百实例源码以及开源项目源代码

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    cloudspeq:在云端进行分布式 Rails 测试

    即插即用:无需应用程序配置即可与任何 Rails 代码库配合使用 快速:可以在 20 秒内运行 5 分钟的测试服 可扩展:可以使用 10 台机器或 100 台机器。 可控:您可以控制要使用的机器类型、数量和使用时间。 您还可以...

    dailyrails-rspec-2017:使用RSpec的Everyday Rails Testing 2017版的样本源

    进行示例Rails 5.1应用程序: Aaron Sumner进行测试驱动开发的实用方法。 该存储库演示了对现有应用程序的增量测试,该测试从未经测试的代码库开始,直至模型,控制器,功能和请求规范。 每个章节的进度在此存储库...

    JAVA上百实例源码以及开源项目

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    java开源包8

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    java开源包10

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    java开源包1

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    java开源包11

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    java开源包2

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    java开源包3

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    java开源包6

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    java开源包5

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    java开源包4

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    java开源包7

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

Global site tag (gtag.js) - Google Analytics