重构 我到底要不要重构?

Peter · 2013年02月01日 · 最后由 simlegate 回复于 2013年05月24日 · 5201 次阅读

重构有很多种,我想把 php 转向 ror

像我这种写了几年 PHP,熟悉了一种框架,闭着眼睛都在用 PHP 数组处理数据的人,试着学习 ror,也是因为各种大侠忽悠的缘故。

我底子太差,练多了花拳绣腿,让我重新从骨子里自废武功,再重新坠下山崖找本秘籍来练,实在是件需要勇气的事。我时间不成块,零零星星学了 ruby,看了一些 rails, 用了一些 gems,做小站可以跑,但要把正在运行的几万用户的网站改成 ror,真下不了手。

ruby 很好,各种强大,但我一想到要处理个字符串,脑袋中马上蹦出来的都是 php 的函数,参数位置都一清二楚。看到 ruby 各种漂亮的语法,比如 ||= ,元编程等等,心中久久不能适应。我愚钝,愚钝 ...

rails 也很好,各种强大,gems 各种丰富。但我真正需要的,php 界不可能没有。

我比较痛恨的是 ror 曲线太陡,那么多约定,出个问题都不知道是违反了哪个“腚”,高手心中有把无形的剑,指哪打哪,我心中只能滴血,写点小代码遇到各种坑。

高手们比较喜欢展示一些自动化的东西,比如一个 rake,输入几个参数就可以把一个网站搭起来,比如台湾地震,哪个人几小时做了个站,blabla, 但问题是我就一个站,我又不是天天写网站的人,我一行一行写配置也用不了多久吧,而且就一次性的事。rails 生成 MVC,或者只生成某一部分的那个什么脚手架,不管是原生的,还是自己优化过的,也节约不了多少工作量吧,哪个网站大到天天加 controller, 加 model, 如果自动地加完能用也就罢了,但那些个 MVC 根本就不能直接用,顶多 controller 几个 REST 还凑合,不过用的情况下,REST 我都用不完,还要删。

高手们都在说写 ror 效率高,代码少,是人性化的语言加无敌的框架,但问题是,我就开发一个网站,加个功能的时候,不是敲代码花很多时间,而是思考这个新想法要花很多时间。

高手们都说有测试多好,代码升级,测试一绿,心中一阵舒坦,但问题是,我一个网站,功能都数得过来,人肉就解决了。PHP 升级一般是向下兼容的,目前还没出过问题。RoR 测试个分页一般还要研究一下 Factorygirl, 我一个 sql 语句复制 100 行,什么数据都有了,何况我现在还有几万真实数据,把 mysql 数据文件复制一份就可以了,随便删,随便改。

高手们都说自动部署多好,但 ruby-china 上次还是出了事。我是直接在 php 入口文件中,加个判断,如果域名是 localhost,就用一套配置,如果是真实域名就用另一套配置,多一个 if 语句,我 4 核的服务器还是扛得住,部署直接 git 搞定,上传覆盖也行,数据库当然不动,我的部署也没有什么自动化的 db/blabla, 不会出什么大事。如果要动数据库,首先备份,然后直接在 phpMyAdmin 就改了,rake 好用,但问题是谁没事成天加减字段。对于一个正在跑的系统,用一条命令对数据库做修改,是多不靠谱的事啊,而且我连 rake 用哪句 sql 修改我的数据库都不知道。这对那些不懂 sql 的,可能还有用处。

高手们都说各种 ActiveRecord 多好,各种中间层多帅,各种映射多给力,说实话,如果用 mysql,我还是想用 phpMyAdmin 自己一个字段一个字段添加,如果用rails g scaffold tablename name:string hometown:stringnamehometown就是 varchar 255, 真没有人在意 char 和 varchar 的区别吗,我如果一个表都是 char 字段,是不是会更帅一些。

ror 就是两层分裂,高手各种爽,低手各种坑,中间就像 WOW 练级,也就是说几乎没有中间的,挖币挖到有一天突然领悟,原来自己是高手了。

====================

我分析了一下自己的需求和自己的能力,觉得要么用继续 php,也是 MVC,REST,MySQL 封装,还有自己开发的用户系统,虽然 4 年前的代码,现在用下来一点 bug 也没有,升级 php 也没有问题。

或者用 go, go 的目标,少就是多,语法不难,功能够用,我打字快,宁愿啰嗦一点,这样写的代码至少好懂。比 PHP 好在效率方面。但这个不急,有时间就重构,没时间就当爱好,做点处理数据的事还是很好用的。

另外,三个桌面平台和 Android 用 QT, iOS 用 Objective-C, 三到四种语法类似的语言就行了,艺多了真的压身啊,特别像我这种老身子骨,呵呵。

喜欢这个社区,这篇是牢骚也是对我自己定位的思考,以后来这就为了灌水了。

祝各位都能买到回家的票。

创新源于需求

几万用户网站的 working code + 重构成你不熟悉的语言框架 = 灾难

这个背景可以参考 javaeye,他们也是在有一定用户数量的情况,从 php 迁到 rails 的;不过时过境迁,rails 肯定已比当年复杂得多

我也是 ror 新手,各种被坑,但没有放弃。

跟楼主一样的感受。不过对 ROR 挺熟悉了,熟练的人根本不用脚手架,或者只用一次(比如我,主要都是 copy)。 我感觉~ 1、如果只有自己一个人,就按熟悉什么,就用什么的原则。 2、如果有几个人的小团队,就以小团队的最熟悉的来用。少数人倾向多数人。说实话,现在的主流语言和框架,没有哪个满足不了需求的,只是成本是否能接受。反过来说,熟悉的东西,成本最低。 3、如果人很多,你就可以考虑更高的要求,满足你易维护、可敏捷、能快速响应。

还是不要重构到 rails 了,费时费力又不一定讨好,用自己熟悉的语言维护起来简单的话就没必要迁移

相信是 ruby 语言本身吸引你吧。趋势看,ruby 语言会接近和超过 php 的流行度。

总感觉楼主是来踢馆的

人各有志

我有同事是 CSS 高手,一直不喜欢 SASS、LESS 这样的东西 他说,写程序要要那么快干什么?用 CSS,他是在享受慢慢写的过程,就当是在休息

但在我看来,不断重复机械性的工作,实在是浪费自己的青春 当有一个 idea,如果能立刻变成产品,立刻收到反馈,可能就会有神奇的结果 所以,我追求的是最快的速度实现 idea,如何能最快重用已经写过的东西 怎样可以让普通人都能迅速搭建出良好的网站,实现自己的想法

我不觉得他的态度是错的,每个人写程序的初衷并不相同,由此对编程语言、框架的价值的看法也不同。

正好我前不久写了个 rails 简化,可以避开,学习曲线就不陡峭了,几乎跟写 php 差不多。只用 rails 的 mvc。其他的 route,migration,relation 都可以不用,用再学不迟。

ruby 与 php 比有语言优势,比如 block 的写法就感觉很好。

tags.each { |t| .... }

可以对比下 php 的写法。

rails 的优势没那么大。

这是重写,不是重构

@qhwa yes,是的,赞同你那同事,我也一样的感觉。

css 就 css,html 就 html,那些懂 sass、less,不懂 css 是很搞笑的 那些据说懂 rails,会用 helper 方法,而不懂 html,是更可笑的 还有那些会用 helper 方法做 ajax 异步,但是不懂 js,是更更可笑的

#12 楼 @badboy 懂 ruby 不懂 c 更更更可笑,懂 c 不懂 汇编 更更更更可笑,懂汇编不懂纯机器码 更更更更更可笑

#13 楼 @blacktulip 开发 rails,可以不懂 c 吧。没什么可笑的。

#14 楼 @chenge lol, I was being sarcastic ......

Ruby On Rails 有很多最佳实践,有些你可能理解,有些并不理解,不管怎么说,一定要挑你熟悉的用,而不是其他人说的这技术怎么怎么 N.B..技术不是花拳绣腿,写出来让别人觉得很 N.B,而是实实在在解决你的问题. 至于自动部署仍然出现了问题,一方面是服务器上装了和测试有关的东西,并且在服务器上跑测试了。另一方面,使用自动部署是为了降低失误率,避免重复性劳动,并不能保证不出错。偶尔的一次过失就全盘否定,未免太武断了。

#17 楼 @046569 谢谢

我搞不明白为什么本地开发环境和服务器环境要不一样。比如本地用 rails s,服务器用 nginx 等等。

我现在用 php,本地的 apache,mysql 和服务器上一模一样,因为 apache,mysql 配置文件是一样的。我的代码中根据浏览器中不一样的域名自动加载网站的开发配置文件或服务器配置文件。

关于 TDD,本来争议就很大,那一片绿下隐藏的 bug 不知道有多少。就我经验来说,RESTful 的东西还好测试,但很麻烦的功能就很棘手,远不如人肉。

自动部署对于我来说存在的必要性不大,因为我又不是天天在部署。Rails 需要自动部署是因为从本地搬到服务器真的要做很多事,但 php 或者 go 真不需要那么多。这也是我难受的地方,rails 涉及的方面很多,学了好久总觉得还缺少点什么,学了不一定常用,但不学就不踏实。less sass haml 这些东西,看看简介就不少时间,想想项目中用不用又是不小时间,我研究了一圈,最后决定不用,但时间找不回来了。类似的 gems 还有很多,都是一看 feature list 让人激动得睡不着,一用就全是坑的那种,改都不好改。

总的来说,RoR 适合那些天天开发网站,而且还不是开发一个网站的开发者,不然就是大炮打蚊子。

我觉得就跟 Windows 下用 API 还是 MFC 一样,一群用 Rails 的,连 Ruby, sql 语句&优化,html, css, javascript(+jquery+plugin),... 都没搞明白,就被 20 分钟开发 blog 忽悠了,这就是问题。我觉得高手可以用 Rails, 新手还是打基础吧。

Don't do it if you don't like it. Go ahead and keep sharpening your PHP skills. PHP is good.

@blacktulip yeah, someone like to discuss this question, we can ignore it.

#19 楼 @blacktulip Thank you for your encouragement

高手各种爽,低手各种坑说到心里去了,各种坑...

#18 楼 @Peter Ruby On Rails 默认使用 3 套配置是因为不同情境. 开发环境下你不需要缓存类等等。我不想配置什么 MySQL,我只想拿来就用。而 pow 可以让我零配置,我觉得挺好. 其实我觉得 PHP 也存在类似的问题。开发时你不可能开着 XCache 一类的加速器吧???但产品环境你就很需要了. 至于 TDD,你可以接受,也可以不接受,仍然取决于你自己。使用自己喜欢的模式开发,适合自己的才是最好的. 自动部署也是如此,我没采用社区推荐的办法,而转而使用自己写的脚本。但这并不影响我一天内多次更新网站.每次更新一条命令就解决,蛮好的不是么? Ruby On Rails 包含了非常多的最佳实践,涉及了方方面面,确实很难了解的很透彻。不过 haml 或者 SASS 并非属于此类。默认的框架够优秀了,这些 Gem 属于锦上添花,能掌握更好,掌握不了把 ERB 精通了也挺好. 说到底,Ruby On Rails 最大的坑在于:你要尽可能了解背后实现的机制,否则你很难发挥出威力来.Ruby 本来就是 LFSP.你要是觉得 Ruby 很简单,那就惨了。更别说把元编程发挥到极致的 Ruby On Rails 了. 一方面你精通 PHP,另一方面对 Ruby On Rails 浅尝辄止,是不会得出公正的结论的。当你两者都精通的时候再来比较吧! 相信到时候你自己会有答案的. 单纯的语言或框架之争是没意义的

#22 楼 @neverlandxy_naix It's the same. I don't think any php framework - or any other framework - has less "rookie-traps" than rails does. A rookie is by definition easy to be caught in traps

#24 楼 @blacktulip 现在觉得还是 Ruby 本身有趣些,平时用的也是 Ruby。Rails 还处于各种摸索阶段,Web 开发需要涉及到的面太广。

#23 楼 @046569 说得中肯,谢谢

我也开始也是一个网页 php+html 混搭,后来加入 mysql,还是一个文件, 后来加点 jquery, 改改 CSS

折腾了好久以后,看 oscommerce 代码,加入一些常用库。

再后来才用的框架,所以我觉得 Rails 也是一样,要明白 Rails 帮我做了什么,这样对我才有帮助。

#26 楼 @Peter 举个不恰当的例子,你接送两三个人,小轿车就可以了,何必用大客车呢? 你现在没有需求,我不赞同你转换语言。只有当有一天满足不了你的时候,你就比较需要它了。

没必要为了 ror 而 ror,既然已经 php 用的那么熟手(比较好奇楼主是怎么记住 php 那变态的函数命名和颠三倒四的参数位置的),果断继续 php,php 大牛工资不会比 ror 大牛的工资低。用 ror 就是图的写代码方便,如果熟悉了 php 的套路反而觉得 ror 的方式不方便,那么用 ror 的优势就没有了。php 方便的部署,更彻底的跨平台性,易用性,是 ror 难望其项背的

推荐楼主考察一下 sinatra & sequel

从我的经历看,可能还是微软系比 php 系的更符合 ror 的气质吧,我一向是不求甚解,事不躬亲的写代码:写的越少越好,只写我需要的逻辑就好。。。

天下武功,为快不破,我觉得还是 php 系的同学应该坚持一下,毕竟,写配置,写 sql,写 css 再快也比不上啥都不写啊!

padrino 怎么样

嗯嗯,看懂楼主的意思了: 1.PHP 各种麻烦,但楼主已经熟练 2.ROR 各种方便,但楼主各种不熟练 3.最终楼主决定用熟练的东西,顺便吐槽一下方便的 ROR 特性没吸引力,因为楼主都可以 PHP 麻烦地手工实现它们。

可以不用 rails,而只用 haml

楼主这个问题已经不是技术问题了,而是对自己职业生涯的定位问题。如果这辈子只做一个网站,这个网站也只有那么几万用户,运行平稳,那么什么新技术都不需要学。我早年打工时用了多年 C++ 和.NET。全职创业后改用 ROR,因为我发现我隔几个月就会失败一次,就得开始做一个新网站,还是用 ROR 比较快一些。还有一种人需要 ROR,如果在 ThoughtWorks 这种为客户定制网站,敏捷开发的公司工作,这辈子也需要做无数网站。另外,做为一名职业程序员,为了不断提高开发效率,也不得不投资一定时间不断学习新的技术。因为所谓框架以及约定,无非是其他优秀同行的可以复用的工作成果,学习新东西虽然费劲,但还是比自己研发要快,一旦学会了,就会感觉自己的生产力在提高,更有信心面对未知的挑战了。

无论使用任何语言,任何框架。你需要做的事是一方面,你要学习的过程是另一方面,用 php 去维护一个网站并不影响去了解 ror,去学习 go 等等。 像我这样的菜鸟在学习的过程中,发现 git 比 svn 好用那么多,发现 rest 风格比传一堆 query 优雅又便于维护,测试是那么的重要,部署可以那么简单,ror 的一些 best practise 那么优雅。 这个过程中,我没有强迫自己去用 ror 开发一个项目。但是我已经被 ruby&ror 改变了:> 也许每一次维护,修改的时候,我会想,为什么我要像个傻逼一样到处复制代码。怎么样可以让我偷更多的懒. 也许当我面对下一个项目时,我就会问自己,为什么我不用 xxx 这种更好的方式来实现呢?

让自己保持前进,做自己想要做的事,直到有一天你问自己,"为什么我还要抱着那该死的 php 不放?"

rails 并不好对于 PHP 开发者。

#9 楼 @qhwa 程序员跟设计师不太一样吧,好的程序员都讨厌重复的东西

跟着些老程序员用 rails,他们说越用 rails,越不喜欢 rails!不知道他们怎么想的。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号