V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  nine  ›  全部回复第 30 页 / 共 34 页
回复总数  676
1 ... 22  23  24  25  26  27  28  29  30  31 ... 34  
2014-08-12 23:35:58 +08:00
回复了 ddzz 创建的主题 程序员 Rails 是邪教
@Bluecoda 其实rails无论做大做小都比php快,只是php上手简单,不需要学太多东西就可以整出来东西,所以很多人觉得php快
2014-08-12 17:24:25 +08:00
回复了 ddzz 创建的主题 程序员 Rails 是邪教
@Bluecoda

rails 适合写小网站?是php吧

php不太适合多人协同,各玩各的规范,连个migration都搞不明白,连单元测试都不普及。
越复杂的项目,php开发越缓慢。

某腾讯部门主程回来了,告诉我他们
1 不写单元测试,
2 开发的时候,定好字段名称,一个人写一个model
3 大家连到公司同一台测试机上进行开发。

我能忍?
2014-08-12 16:49:51 +08:00
回复了 backli 创建的主题 PHP php 与 ROR 该如何选择?
想创业 ruby
想找工作 php
2014-08-12 16:38:25 +08:00
回复了 xiaobu 创建的主题 程序员 晒键盘了,大家敲代码都用什么键盘?
HHKB pro 2 感觉不好用,出了,换了个mac键盘 480的那个
@bigbee 这个不太清楚 FMS使用的RTSP协议,搞定这个就ok了
6间房是基于 flash media server的 YY语音不大清楚
@TangMonk npm机制好与不好,仁者见仁智者见智吧。
但是node库的质量不高是铁的事实。
@imn1 你这想法基本就是停留在表面,根本没有深层次的思考。细节决定成败。

@breestealth 根本就不是语言层面的差距,而是整个生态环境的差距。

@TangMonk 我没有深入了解过node,估计你也没有深入了解过吧。某次ruby聚会上,某个女程序员对node的module的吐槽,各种坑,和ruby比简直天差地别

@wangdaimishu

收集表单数据我知道,我说的不是这个。YII查询貌似也不需要非要传递一个CDbCriteria,而且传递CDbCriteria也没有什么不妥的。

而且我在刚开始用Rails的时候甚至觉得觉得缺少一个类似这样的玩意。
(用在哪个场景我忘了)



而真正是在多人协同的时候,需要同步表结构的时候,问题就来了。
开发A在表a增加了一个字段,开发B在表a增加了另外一个字段,这时候怎么同步呢?最原始的方法是用navicat手工同步,一条一条比对,极其容易出错,当表结构变化超过5次,已经没人能说的清誰先谁后、哪个是最终正确的表结构了。


我在用自己的框架的时候也有这个问题,我在各种php论坛、群里询问这个问题,多方查资料,线下咨询。(因为当时还是想做自己的框架)
觉得应该可以做成“表结构版本控制”的东西,把表结构变化文件化,然后用git等版本控制工具同步变化。

后来发现rails里面的migration好像就是这个玩意。
然后想到Django里的syncdb 好像也是做这个的,当时回想起n年前买过一本Django的书,里面明确说明“Django是很智能的,即使你在文件里写明了删除某个字段,实际syncdb也不会删除,为了避免部署的时候删错东西”,我简直瀑布汗。。。。
(后来我也没有去考证到底在哪一页,python的书我基本都扔了,就留了一本python cookbook)。

刚刚我又搜了一下The Django Book,找到了类似的东西
http://djangobook.py3k.cn/2.0/chapter05/


~~~~~~~~~~~~~~~
syncdb 命令是同步你的模型到数据库的一个简单方法。 它会根据 INSTALLED_APPS 里设置的app来检查数据库, 如果表不存在,它就会创建它。 需要注意的是, syncdb 并 不能将模型的修改或删除同步到数据库;如果你修改或删除了一个模型,并想把它提交到数据库,syncdb并不会做出任何处理。 (更多内容请查看本章最后的“修改数据库的架构”一段。)
~~~~~~~~~~~~~~~
不过我没找到“修改数据库的架构”这一段。

我研究python的web开发主要还是在2010年左右,可能现在python社区有解决方案,只是我不知道(请谅解)


然后某天看到YII里也有migration,但是这明显是一个后补进的设计,因为YII并没有强制使用migration来生成表结构,也许是为了好上手吧。

但我们可以强制团队必须使用migration,于是流程是什么呢?

1 写migration文件
2 运行migration ,生成表结构
3 根据表结构生成model文件

而rails是
1 rails g model model_name 直接生成model文件和migration文件
2 写migration文件
2 $rake db:migrate 根据建立表结构


由此可以看出来YII的migration是可以砍掉的,目的是为了某些不想写migration或压根不想了解migration的人,手工建表也可以使用yii框架的其他功能。

而Rails则是赤裸裸的由ruby代码+ruby命令行来控制一切。



此时我们比较一下2个model文件
发现rails的model只有2行
1 class SourceHtml < ActiveRecord::Base
2 end

而YII的model里面洋洋洒洒。

这时候你说了,YII的model里面写的东西可以用来写验证和生成表单,Rails其实也是可以的。

然后我们看看YII的model里写了多少无趣的东西
public static function model($className=__CLASS__)
{
return parent::model($className);
}
每个方法在model里面都有,OMG!
dont repeat your self好吗?

我自己的的框架里是不需要定义这个方法的,因为
我的ActivRecord里是这样写的
static public function model(){
$class_name = get_called_class();
if (is_callable("{$class_name}::instance")) {
return $class_name::instance();
}
return new static;
}


而YII的CActiveRecord是这样的
public static function model($className=__CLASS__)
{
if(isset(self::$_models[$className]))
return self::$_models[$className];
else
{
$model=self::$_models[$className]=new $className(null);
$model->attachBehaviors($model->behaviors());
return $model;
}
}

对比了一下我知道为什么了,用new static的做法在IDE没有智能提示的,所以YII妥协了,要显式的传递一个__CLASS__进去


而我又在model里发现了这样的东西
public function rules()
{
return array(
array('user_id, last_time, last_ip', 'numerical', 'integerOnly'=>true),
array('player_name', 'length', 'max'=>255),
array('id, player_name, user_id, last_time, last_ip', 'safe', 'on'=>'search'),
);
}

public function attributeLabels()
{
return array(
'id' => 'ID',
'player_name' => '玩家昵称',
'user_id' => '平台用户',
'last_time' => '最后登录时间',
'last_ip' => '最后登录ip',
);
}

这意味着什么?这些代码都是由表结构生成的。我不知道把表结构复制出来一份放到model里的意义何在。
于是我们需要修改表结构的时候,要酱紫
1 写migration
2 运行migration
3 ?
运行完migration之后,model里的rules() attributeLabels() 是不会改变的,model里的代码需要手工再修改一遍,而且绝对不止这两个method。如果表结构修改比较多,呵呵。。。

当然你可以运行gii什么的,重新生成一遍model文件,但结果是,自己手工写的代码会被覆盖掉。所以这个操作是个绝对危险的动作。


所以也有很多人php开发不喜欢用框架。
其实原因是:用不合理的设计,搞了一堆一堆半半拉拉的自动化工具,做了一个蹩脚的不完整的解决方案,还楞要人家学习和使用。用的人不烦才怪。
80% * 80% * 80% = 51.2% , 还不及格
我还见过更极端的,坚决不用YII,要用YII他就闪人。

我不知道Laravel是个什么情况,看过文档,基本算是rails在php这边做的复制吧。
不过既然有了iPhone,谁还用小米。


年前某个公司boss让我带团队,我说用ruby吧,他同意了,后来又反悔了,团队已经学了并用rails做项目一个月了,丫硬非要改回php。直接闪人。

还是那句话“细节决定成败”,python node go php 基本都看过了,不是单是语言好坏,主要在于社区气质,只有ruby社区是最有追求极致的气质,果断皈依。
php流行不是因为开发快,而是门槛低。

环境好搭建,程序只要一个ftp传上去就行了,不需要编译,不需要重启。
加上各种开源程序一堆堆,普通文科生随便学学拿来改点东西就接单了。

至于“快”,呵呵,做demo速度还行,复杂度高点的项目就不行了,而且没有好轮子。
缺少最佳实践的方案,问过很多人,都是自己整出一套私有的,而且不好用。

自己写过php框架,试过python node go 。最终到了ruby,发现什么东西在这儿都TM是现成的,其他别的语言的方案都是抄袭ruby的,NND。

用coffee写js(可以自动编译的),用slim写view ,简洁的model(看着YII定义的那一坨东西我就想死,还没我自己框架的ActiveRecord好用),一气呵成的migration,太爽了(YII是通过表生成model你造吗?)。
代码表达力太强了,从来没想过我能用一个13寸屏写了半年代码。(之前都是双Dell 2412还不太够用)

但就是部署稍微麻烦点。但总体上速度,呵呵,我只能说php弱爆了。


不讨论语言的好坏?呵呵。
好吧,我不讨论,我自己偷偷用ruby爽就好了。闭嘴多做实在事,精进技术,省的被喷。相信大部分rubyer的也都是这么想的吧。
2014-07-28 01:18:10 +08:00
回复了 youlil 创建的主题 程序员 你的编程起点在哪里
@GeekBao 作为开发打了几年工,觉得可没意思,目前捣鼓点自己的项目,偶尔接单赚点闲钱。
2014-07-27 13:24:04 +08:00
回复了 youlil 创建的主题 程序员 你的编程起点在哪里
互联网从业n年之后,28岁高龄的我,一次又一次的被“程序猿”们的各种“实现不了”激怒。
嫂可忍叔不可忍,QNMLGB的老子自己来。
ruby 表示毫无压力

require 'active_support/core_ext'

p Date.today
p Date.yesterday
p Date.tomorrow

p Date.today + 10.days + 8.hours + 15.minute + 59.second

p Time.now.to_date


@est
require 'active_support/core_ext'

p Date.today.day - Date.today.wday - 4
2014-07-23 12:23:15 +08:00
回复了 BInaryTree111 创建的主题 程序员 大牛需要一个怎么样的交流环境(线上)?
@WildCat 低调,不要加入语言之争,让phper们自娱自乐吧
2014-07-20 22:28:51 +08:00
回复了 raynix 创建的主题 程序员 这里有多少人是 TDD 粉丝,忠实的
TDD很好啊,就是有点累
1 ... 22  23  24  25  26  27  28  29  30  31 ... 34  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2327 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 29ms · UTC 01:38 · PVG 09:38 · LAX 18:38 · JFK 21:38
Developed with CodeLauncher
♥ Do have faith in what you're doing.