`
jack
  • 浏览: 392748 次
  • 来自: 温州
社区版块
存档分类
最新评论

一知半解用ruby开发

    博客分类:
  • Ruby
阅读更多
  从第一次接触ruby & rails到现在有段时间了,本着一贯快学快用习惯,看了一遍书之后就开始用ROR做了些小项目,边做边查,边学边忘,到现在还是没有记住几个ROR的特征关键字,比如什么约定阿,约束什么的,也分不清为啥有symbol这么奇怪的物件。更加不清楚yield到底怎么起作用的。
  不过这些并不妨碍用ROR去开发项目。我只要知道怎么用就行. 接下来说说我是怎么用ROR的.觉得乱的就跳过好了.因为不完全懂得ROR,如果有用错词,见谅.想到那里写那里
 
   each, each的使用频率很高,如果代码中需要循环,基本上就是each,偶尔用用times,在极为少见的情况下才用step.虽然我知道each在语义上是一个迭代器, 不过我都是当作循环函数来看待的,一个用起来简单的循环函数.
 

   大部分情况,我的each代码都会写成 each do ...end 最近才开始用 each {|x| ...}这样的简单用法,想想也奇怪,明明后面的写法可以少打很多字,为啥一定要固执的用前面的那种写法呢.
  
   我知道有其他的循环代码的写法,不过我没有记住怎么做的,反正不知道也没有关系. each time,step几个够用了.

   unit test,一开始的时候我还耐着心思写了不少的unit test,不过到后来,越写越迷糊.这个单元测试的粒度到达多大才合适,以及unit test到底测试什么,为什么要测试那么的代码成功被执行是怎么样的,不成功执行又是如何如何。最终也就不了了之了,现在倒是考虑需要一个整体的功能性的测试脚本。

   运行环境,一开始依然是顽固的采用了windows环境,现在还有个项目一直运行在windows环境上,运行了也有2年了吧。虽然也没有出什么意外吗,不过不比不知道,linux环境下,这个运行速度居然相差如此之大。
 
   YAML,ruby有不少的地方用到这个,我第一次考虑在代码中用这个,是因为需要保存一些类似脚本的数据,需要额外配置,配置的时候甚至还需要设置一些简单的逻辑。于是用YAML,初期还是可以凑合着用的,不过一旦配置文件的逻辑复杂起来,这个就不行了。YAML保存数据还行,加入过多的逻辑就不行了。

   DSL,于是接下来就是DSL了,网络上搜索了一大堆的Ruby DSL的教材,最后突然发现,我要的是类似AR的DSL写法 has_one,has_many,直接的把AR::Base的文件结构复制了一份,去掉不需要的代码,保留了一个has_one,然后开始写自己的DSL,然后很长一段时间内,都是has_one这样用法的DSL脚本。

  DSL的加载,development模式下,其他的rb文件都是修改后马上可以生效的,页面刷新下就可以了。不过DSL加载后,修改对应的rb文件,刷新页面无用。每次都是关掉WEBrick,再开才有效。
 
  这样写好像过于流水帐了,下面的开始选择项目中的某个方面,讲讲从项目初期到最终的时候是怎么变化过来的。
 
   讲讲项目中log输出的前后变化
分享到:
评论
13 楼 nan1nan1 2008-11-09  
jack 写道
你这个是写法的问题吧,不是优先级别的

正确的写法应该是foo(p1,p2){....} 你把改写的括号省略了,当然会出现看似优先级别的问题,实际上你这个是完全不同的两个语句


既然所有人都是在某种“一知半解”的程度上,那么做结论前,最好先仔细考虑考虑、调查一下。

比如()的优先级,什么叫“正确的写法”
12 楼 kenrome 2008-11-06  
我的学习路线是这样:
了解Ruby---学习Rails---学习Ruby---用Rails开发项目---深入Ruby

我猜大部分学习Ruby的程序员都或多或少有其他语言的基础,所以学这个的感觉就是,一开始很爽,其他语言很难解决的问题用Ruby很好就可以解决,可是,怎么有点晕呢...
11 楼 hideto 2008-10-28  
jack 写道


不是工具的问题,是测试粒度大小的问题,还有怎么测试。

model的函数,要测试吗,controller用到了这个model的这个函数,要测试吗,view中呢,都要一层一层测试吗。 测试那一层才是最有必要的?



结合自己的一些体会有感而发:
在freewheel的UI(UI指Web界面,不是单纯的指html、css)组工作1年多,一个较大的体会是流程化、自动化的控制做的比较好。我们有程序员level的单元测试,有ci服务器,有专门的QA team(QA team vs DEV team接近1 : 1的人数)

为什么我们这么重视测试?
因为商业软件特别是ASP product很注重SLA,一个在线商业服务软件,即使是一个月出现5分钟的down time(在maintenance window外)也是不可容忍的,因为带给客户的损失可能是非常巨大的。

测试的目的?
测试的目的就是为了保证软件服务质量,没有经过严谨的测试的软件谁敢用?没有经过24小时摇晃实验的机械手表你敢买?没有经过C-NCAP碰撞测试的汽车你敢开?

测试的种类?
测试有很多形成体系的分类,从程序员的角度来看最关注的就是单元测试。从QA的角度来看最关注的则是集成测试、验收测试、黑盒测试

为什么程序员要关注单元测试?
因为QA在集成测试时发现软件有bug,这时就会过来找程序员的麻烦。所以,为了减少一来一回的改bug和沟通的成本,程序员有必要站在开发人员的角度保证软件的基本单元的质量,即单元测试。好比汽车零件生产商要保证每个汽车零件的质量,电脑零件生产商要保证电脑零件的质量,这样组装起来的汽车、电脑的整体质量才能过关。

有哪些单元测试?
具体化到Web UI的开发结合流行的MVC框架来看,程序员最需要保证的就是业务逻辑的正确性,而业务逻辑都在Model层面,所以Model层是最重要的也是最需要测试的地方。在这里一个Model方法的测试就是一个单元测试。Controller层也需要隔离测试,因为Controller层是Web程序的Work Flow,Controller不测试的话怎能保证一个URL的访问能得到预期的结果?View层也是需要测试的,因为View层包含了一些动态网页的页面逻辑,如果不测试怎能保证页面渲染正确?

MVC三层的测试是最基本的单元测试需要覆盖的地方,一旦程序员保证了这三部分,则QA在做集成测试、验收测试时会大大减少出现bug的几率,从而也让程序员的生活更舒适。

为何需要自动化?
我们有自己的ci服务器做持续集成,每批次svn commit都会触发ci跑集成测试,自动化的目的就是及时发现bug的回归、减少手工跑测试浪费的时间、清楚的了解项目目前的质量水平。
ci可以设计的比较灵活,针对不同的层面来跑不同的测试,比如集成测试和单元测试可以分为两个项目来跑。ci上报错可以给开发人员发email通知来及时fix bug/test,以免bug扩散。

一句话,有了良好的测试才能保证软件质量,所以我们要认真对待测试,提高对测试的认识。
10 楼 jack 2008-10-26  
你这个是写法的问题吧,不是优先级别的

正确的写法应该是foo(p1,p2){....} 你把改写的括号省略了,当然会出现看似优先级别的问题,实际上你这个是完全不同的两个语句
9 楼 nan1nan1 2008-10-25  
robbin 写道
不是流氓 写道
我记得在ruby cookbook上写到
each do ... end主要是注重循环的过程,而each{}好象注重循环的结果吧

PS:有个问题想问问大家,是不是rails开发都要写测试啊?只写过一次测试


do ... end 和 {} 是一回事,只不过在ruby的代码风格上来说, 如果在block内部分行的话就用 do ... end,如果不分行的话就用 {}


do ... end 和 {} 有优先级的区别,比如
foo p1,p2 do ... end
foo p1,p2 { ... }

do ... end的优先级比较低,它是作为foo的block被调用的
{...} 的优先级高,它是作为p2的block被调用的
8 楼 robbin 2008-10-25  
不是流氓 写道
我记得在ruby cookbook上写到
each do ... end主要是注重循环的过程,而each{}好象注重循环的结果吧

PS:有个问题想问问大家,是不是rails开发都要写测试啊?只写过一次测试


do ... end 和 {} 是一回事,只不过在ruby的代码风格上来说, 如果在block内部分行的话就用 do ... end,如果不分行的话就用 {}
7 楼 不是流氓 2008-10-25  
我记得在ruby cookbook上写到
each do ... end主要是注重循环的过程,而each{}好象注重循环的结果吧

PS:有个问题想问问大家,是不是rails开发都要写测试啊?只写过一次测试
6 楼 woody_420420 2008-10-24  
jack 写道
不是工具的问题,是测试粒度大小的问题,还有怎么测试。

model的函数,要测试吗,controller用到了这个model的这个函数,要测试吗,view中呢,都要一层一层测试吗。 测试那一层才是最有必要的?

一点个人感受:
1.如果非要选一个“最有必要”的层。我觉得肯定是model。
2.粒度方面。。各路神仙都说过了,单元测试,单元!model测试测model,测controller的时候,对model调用进行mock,只测controller的逻辑。view测试?貌似在目前国情条件下,可以放一放。只不过~到了现实环境,似乎大多是controller的测试都到model转了一圈。mock大家都懂,实际有多少人愿意mock controller中所有model的调用。直接调用下,多happy,慢就慢点吧。。。:)
3. 见1
5 楼 jack 2008-10-24  
不是工具的问题,是测试粒度大小的问题,还有怎么测试。

model的函数,要测试吗,controller用到了这个model的这个函数,要测试吗,view中呢,都要一层一层测试吗。 测试那一层才是最有必要的?
4 楼 hideto 2008-10-24  
jack 写道

   大部分情况,我的each代码都会写成 each do ...end 最近才开始用 each {|x| ...}这样的简单用法,想想也奇怪,明明后面的写法可以少打很多字,为啥一定要固执的用前面的那种写法呢.

因为用each {|x| ...}方式来写的话一般比较简单的比如只有一行代码的可以这样用
否则,多行代码还是用each do ...end来写可读性比较好

jack 写道

   unit test,一开始的时候我还耐着心思写了不少的unit test,不过到后来,越写越迷糊.这个单元测试的粒度到达多大才合适,以及unit test到底测试什么,为什么要测试那么的代码成功被执行是怎么样的,不成功执行又是如何如何。最终也就不了了之了,现在倒是考虑需要一个整体的功能性的测试脚本。

你不用rspec吗?
Model、Controller、View、Helper、User Stories for Integration Testing这几个层次的测试都覆盖到了
Spec::Rails
3 楼 jack 2008-10-24  
多谢指点了,不过大部分情况我还是坚持够用就行的开发方式
2 楼 rubynroll 2008-10-24  
jack 写道
  ...大部分情况,我的each代码都会写成 each do ...end 最近才开始用 each {|x| ...}这样的简单用法,想想也奇怪,明明后面的写法可以少打很多字,为啥一定要固执的用前面的那种写法呢....
 

用do...end可以避免歧义。因为如果是空的{}既可以理解为空的hash也可以理解为空的block。当然在这里each不接受参数因此就没有歧义。用do...end可以显式说明是block。

例如以下这段代码,不同版本的ruby可能有不同结果:

def test(a = nil)
  puts "hash" if a
  puts "block" if block_given?
end

test {}
test{}




jack 写道

   YAML,ruby有不少的地方用到这个,我第一次考虑在代码中用这个,是因为需要保存一些类似脚本的数据,需要额外配置,配置的时候甚至还需要设置一些简单的逻辑。于是用YAML,初期还是可以凑合着用的,不过一旦配置文件的逻辑复杂起来,这个就不行了。YAML保存数据还行,加入过多的逻辑就不行了。
 

如果配置文件逻辑负杂,干脆就直接用代码好了,用的时候load进来。

jack 写道
  DSL的加载,development模式下,其他的rb文件都是修改后马上可以生效的,页面刷新下就可以了。不过DSL加载后,修改对应的rb文件,刷新页面无用。每次都是关掉WEBrick,再开才有效。


在rails 1.x中,可以用include Reloadable, 2.x中好像可以通过配置解决reload问题。


既然选择使用Rails,那么就投入点精力好好研究一下Ruby还是很有必要的 :)



1 楼 花花公子 2008-10-24  
ruby开发和rails开发毕竟不一样,rails经验丰富的人对ruby开发也不一定了解。

相关推荐

    Drupal专业开发指南(中文版)99.9%完整

    您是否还在为对Drupal的一知半解而闹心; 或者当你想要用它时,却不知道它原先是否已经有了这个功能; Drupal专业开发指南是您的治病良药! 针对上回的不完整版,这回总算整理完了,之所以取名99.9%,是...

    深入体验Java_Web开发内幕-核心基础

     本书深入地揭示Java Web开发内幕,细致地解释许许多多来自开发第一线的一知半解的问题。阅读本书,可以为您详细地剖析Java Web开发的全过程,使您轻松地解决在使用Java进行Web应用开发遇到的各类疑难杂症。  本书...

    开发人员应该了解的密码学常识.pdf

    但我们经过大量接触一线开发人员,发现大多数开发者对基本的密码学知识都是一知半解,要么盲目信任已有的框架和库来解决加密解密问题,要么自行发明各种山寨的加密解密算法。我们将带来通俗易懂的“密码学知识”话题...

    (备战中考)中考语文 课外文言文专练 一知半解

    这讽刺了他死读书、不活学活用,忽视了道德和人伦常识,显得极其书呆子气。 4. 对中考生的启示: 在准备中考的过程中,学生不仅要掌握语文知识,还要学会灵活运用,不能仅仅停留在文字表面的理解。学习文言文时,...

    深入体验Java_Web开发内幕-核心基础04

    本书深入地揭示Java Web开发内幕,细致地解释许许多多来自开发第一线的一知半解的问题。阅读本书,可以为您详细地剖析Java Web开发的全过程,使您轻松地解决在使用Java进行Web应用开发遇到的各类疑难杂症。

    深入体验Java_Web开发内幕-核心基础03

    本书深入地揭示Java Web开发内幕,细致地解释许许多多来自开发第一线的一知半解的问题。阅读本书,可以为您详细地剖析Java Web开发的全过程,使您轻松地解决在使用Java进行Web应用开发遇到的各类疑难杂症。

    深入体验Java_Web开发内幕-核心基础02

    本书深入地揭示Java Web开发内幕,细致地解释许许多多来自开发第一线的一知半解的问题。阅读本书,可以为您详细地剖析Java Web开发的全过程,使您轻松地解决在使用Java进行Web应用开发遇到的各类疑难杂症。

    深入体验Java_Web开发内幕-核心基础01

    本书深入地揭示Java Web开发内幕,细致地解释许许多多来自开发第一线的一知半解的问题。阅读本书,可以为您详细地剖析Java Web开发的全过程,使您轻松地解决在使用Java进行Web应用开发遇到的各类疑难杂症。

    Docker容器从一知半解到入门.pdf

    。。。

    Docker容器从一知半解到入门.docx

    。。。

    jsp公交查询系统源码(java开发)

    【描述】"公交查询系统 java公交查询系统 jsp公交查询系统源码(java开发)"说明这个项目是用Java语言开发的一个公交查询应用,而且提供了源代码。这通常意味着我们可以深入学习其内部工作原理,包括数据库交互、...

    参考资料-如果你对环路补偿一知半解,看看这4大要点.zip

    环路补偿是控制系统设计中的关键概念,尤其在自动控制领域,它对于系统稳定性和性能有着决定性的影响。本文将从四个主要要点出发,深入解析环路补偿的基本原理和应用。 一、环路补偿的定义与作用 ...

    golanghalf:go语言一知半解,3分自知,7分收集,留作学习

    "Go语言一知半解"这个项目,从标题上看,可能是作者在学习Go语言过程中的一些个人理解和资料收集。这通常包括对语言特性的解析、常见问题的解答以及实用示例等。描述中的"3分自知,7分收集"意味着该项目包含了大量的...

    Windows 95 Multilingual IME

    本人搜索了很久,“Windows 95 Multilingual IME”这一部分的文档在2003以上的DDK中并不包含,在开发IME框架的输入法只能参考wingb的示例程序,看代码看的一知半解,找了好久win95DDK找不到(以为其在其它DDK中没有)...

    RUP:通过用例应用需求管理(上)

    RUPrupRUP:通过用例应用需求管理(上)软件测试如果您对需求管理一无所知或者一知半解,但有志于改进需求过程,那么本文将为您提供一个框架,您可以利用它开发自己的方案。用例和软件需求规约(SRS)为了让读者更好地...

    10-IoC配置-依赖注入概念(DI)

    我相信很多朋友学习IOC概念的时候,查找了很多资料结果还是一头雾水,感觉高深难懂或者一知半解,而我这篇博客就是以通俗易懂的话语,用故事的方式,讲解IOC(控制反转)和DI(依赖注入)的概念,让大家不再晕,不再觉得...

    DNS速度测试 Namebench [免费版]

    不过对于多数普通网民来说,对DNS是一知半解,更不用说如何去配置服务器或者测试速度的快慢了。 而今,Google推出了一款DNS测试工具Namebench,有了这个工具,你就可以轻松的找到最快的DNS了。Namebench由Google...

    Maven原理分析PPt详解

    maven技术已经广泛使用于企业,但很多开发人员对maven还是一知半解..看看我的ppt吧

    对MOS管驱动电路一知半解?这里有你想要知道的一切

    一、MOS管驱动电路综述 在使用MOS管设计开关电源或者马达驱动电路的时候,大部分人都会考虑MOS的导通电阻,电压等,电流等,也有很多人仅仅考虑这些因素。这样的电路也许是可以工作的,但并不是的,作为正式的产品...

    15天学会jQuery

    jQuery是一个广泛使用的JavaScript库,它通过提供一个简便的方式来选择和操作文档对象模型(DOM),极...无论你是对JavaScript一知半解的新手,还是想要提高自己编写动态网页的能力,学习jQuery都将是一个明智的选择。

Global site tag (gtag.js) - Google Analytics