Rails 我认为 Guide 教程里的 “scaffolding” 纯粹是引新人入坑。元芳,你怎么看?

suriv · October 16, 2012 · Last by hardywu replied at February 19, 2014 · 6234 hits

补充一下,其实大家的回复都偏离了我的意思。无意争吵。

我认为一个良好的帮助,应该是教初学者一步一步创建出 M,V,C。这其实并不难,创建三个文件而已。只需要手把手做完这三步,立即会对 ROR 中的 MVC 模型有一个深刻而具象的认知。而不是像现在这样:很多初学者做完了 Demo,却感觉自己被蒙在鼓里,没有一点而兴奋——因为这个 demo 实际上不是他本人“亲手”完成的,而是归功于脚手架。

当一步一步地完成一个简单的 demo 之后,再告诉学习者:其实不必如此麻烦的,ROR 已经为你准备好了一个叫 Scaffold 的工具,它可以帮你创建好上面的文件。

实至名归。


我曾经也是一个 Rails 的入门者。说说我当时的情况吧。

入门 ROR 之前,已经比较熟悉地了解 PHP 的 Thinkphp、CakePHP 等 MVC 框架,Python 的 Webpy 框架,Bootstrap 前端框架与 JS/CSS 等。也就是说,对 MVC 有了不少了解,使用 Ruby 也能够进行简单的元编程了。

直到我去读 ROR 官方原版的 Guide,那感觉就像膝盖中了一剑。

首先,Guide 写的开始部分还是挺不错的,然后就不停的吹嘘“Rails”是多么的敏捷——看那架势,一个真真的 Beginner 准会以为 Rails 真正的就是那种丝毫底层都不需要了解的快速入门语言——我认为这是一个极大的误导——只为了吸引更多初学者的目光。

然后,敏捷开发来了:它随后使用了脚手架(Scaffolding)创建了一堆文件。然后几乎没有任何代码,我们的确发现一个拥有增删改查的“网站”出现了!连 CSS 和 JS 都是那么完美。

这时候,新手们就懵了。如何创建一个 M?不知道。如何创建一个 V?不知道。如何创建 C?不知道。他们之间如何联系?不知道。

然后我按照教程的方法,象征性的增加了一个名为 History 的模型。事实证明我再次懵了:它自动把 history 复数成了 histories。。。。我去!!!这也太智能了吧。。。。可是,我当时分明感觉到的不是智能——而是一种未知的,略带自作聪明的力量,感觉到了前方的坑!!!

无论如何,我始终认为这是教程最大的败笔:明知道 Scaffolding 功能只是块糖,在实际的开发过程中几乎不会用到,但它仍然选择了这个命令,来证明 ROR 是多么的“敏捷”。而忽视了作为一篇基础教程:hand by hand,one by one

这样做的后果是一个初学者不知道这个命令如何生成了哪些文件,这些文件如何合作。 对于一个已经了解了 MVC 的人来说,也不会对 ROR 的 MVC 有任何直观的感受。唯一的感觉就是:不灵活。

或许这篇贴的确有点妄自菲薄。元芳,你怎么看?

你就当它是个代码生成工具就可以了,这个无数大牛都说了,实际项目中很少使用脚手架的

到目前为止,我依然再大量使用 scaffold 来生成各种文件,这个东西不是鸡肋! 项目一开始创建都是用它来快速生成原型的(应该说某个表引出的功能都是用它来搞出来的)

#2 楼 @huacnlee 我认为这个功能主要应用在于:数据库管理、库存、进存销管理、博客系统等。这种系统以数据库业务逻辑为中心,脚手架很快就能把原型搭建起来。

但更多的应用并非数据库简单的增删改查,而是更多复杂的逻辑。使用脚手架生成出来的简单的模型反而会不合适。

我喜欢用 scaffold 来生成文件,然后再手动删除一部分不需要的。

scaffold 怎么会是「纯粹是引新人入坑」呢?我记得我刚学 Rails 是,执行完 scaffold 后,Rails 的整个 MVC 目录结构就很清晰了,而且我觉得 scaffold 正好体现了 Rails 的一个设计哲学:约定优于配置。

至于你提到的复数问题,看看这里 http://blog.thefrontiergroup.com.au/2011/06/pluralizations-and-singularizations-inflections-in-rails-3/

其实用 scaffold 来入门,没有什么太大的问题吧。history 和 histories,这个对于老外来说是很正常的思维了。

Getting Started with Rails This guide covers getting up and running with Ruby on Rails. After reading it, you should be familiar with:

  • Installing Rails, creating a new Rails application, and connecting your application to a database
  • The general layout of a Rails application
  • The basic principles of MVC (Model, View Controller) and RESTful design
  • How to quickly generate the starting pieces of a Rails application

我觉得 getting started 的任务已经完成了。想看完 getting started 就开始开发实际应用,我觉得怎么都不可能的。

用来入门没有问题啊,等于有人按你的思路给你写了一个例子,然后让你看代码。

要说新人不知道如何创建一个 M, 一个 V,感觉这和 scaffold 没关系啊,你不去理解它,如何会知道它是怎么样创建的呢?scaffold 就给了你一个活生生的例子,让你研究。

#6 楼 @Rei 我认为,指导一步一步创建出 M、V、C,让读者能够对 MVC 有个直观的体验与认知,亲手写出能用的 Hello world,可能会更有成就感。

呵 怎么听楼主这个意思是 用 Rails 不仅仅是敏捷,连学习都免了。我不相信会有一本讲 Rails 的教程竟然不讲如何创建 model,view,controller 的,会不讲 Rails 约定的。新手只要按部就绪的学习,又怎么可能疑惑呢? scaffold 是很不错的工具,自动生成高度提炼过的最纯粹最简单的同时由完全实现 rest 功能的代码。

#7 楼 @yzhrain “要说新人不知道如何创建一个 M, 一个 V,感觉这和 scaffold 没关系啊,你不去理解它,如何会知道它是怎么样创建的呢?”

我不认同。一个良好的帮助,应该是教初学者一步一步创建出 M,V,C。这其实并不难,创建三个文件而已。只需要手把手做完这三步,立即会对 ROR 中的 MVC 模型有一个深刻而具象的认知。而不是像现在这样:很多初学者做完了 Demo,却感觉自己被蒙在鼓里,没有一点而兴奋——因为这个 demo 实际上不是他本人“亲手”完成的,而是归功于脚手架。

当一步一步地完成一个简单的 demo 之后,再告诉学习者:其实不必如此麻烦的,ROR 已经为你准备好了一个叫 Scaffold 的工具,它可以帮你创建好上面的文件。实至名归。

#9 楼 @iBachue 误解了。我是指官方的那篇 Guide。

大人,此事必有蹊跷。

#3 楼 @suriv Scaffold 生成的模型已经简单到不能再简单,怎么会不合适,难道你新建的文件和 Scaffold 生成的完全不一样?Scaffold 最多只是给添加了 attr_accessable 和模型关系(这还是在生成命令里指定的)

同时 Scaffold 生成文件的过程很直观阿,已经告诉你哪些文件已经生成好了。

它做对了两件事情,一是正确的创建出各种文件夹和文件,二是生成的文件很符合 RESTful 风格,新手可以很容易模仿。

师傅领进门,修行靠个人

没有用过 PHP 开发过项目,不过用 JAVA 开发过项目,项目代码量稍微多一些,各种混乱,当一个项目经过三四道离职人员的手后,你就会明白,rails 是有多么的好

斯坦福大学公开课:<编程方法学> 提到一个概念,"信息隐藏", 使用微波炉你不需要知道微波炉是怎么动作的,只需要知道怎么使用它。把需要加热的东西放进去,调节好温度,再按启动就行了 编程也一样

事实上我的第一个应用用脚手架生成的,一个简单的门店报表系统,现在都还在使用中 https://github.com/mangege/peng rails 包含的概念太多了,没有编程经验是很难理解的,如果有其它语言的经验,就很容易多了. 比如像 MVC,RESTful, 这些概念在 JAVA WEB 开发都是一些基本概念

#13 楼 @_samqiu 但有一点要留意:手动创建文件,新手会有一个直观的体验,他会知道,这些文件就是一个功能的关键。他会清清楚楚的知道,这些 demo 都是自己亲手创建的。 一个熟练使用 ROR 的人,虽然也会倾向于使用 scaffold——但这是建立在完全了解 ROR 这一特征的基础之上的。

Scaffold 的确简单,简单是简单了——但这对新手了解 MVC 之间真正的联系有多大帮助吗?

#16 楼 @suriv 说实话,让新手直接创建,很有可能会因为以下情况而失败:拼写错误、文件夹放错、文件名写错。

我仍然认为 Scaffold 是一个非常好的工具,生成的文件可以让新手照葫芦画 X。

教过一百来个新手,感觉开始就上 scaffold 确实是坑。弄了 scaffold, 就要解释为什么就能工作了。就要解释生成的每个元件是什么,还要解释这些东西是怎么组合在一起的,还要解释某地方的某些语法怎么回事,还要解释什么地方是怎么约定大于设定的。不解释,新手不懂就会问。解释了,实际就是解释了 Rails 的大部分,新手必晕。我们以前讲这个之后问,“大家有什么问题么?”得到最多的问题是”这节课录像了吧?“

我们现在直接绕过 scaffolding, 而是把每个 Rails 组成部分隔离开来讲,隔离开来练。深度优先 而不是 广度优先。让新手一块一块啃,效果还不错

最近“元芳”很火啊。

同意楼主。既然是 Guide,那就应该从最基本的开始,由浅入深,一步步讲解,而不是先来个高深莫测(对新手来说)的魔术,蒙倒一大批再说。 我在跟着这个 Guide 走的时候,面对最后完成的 Demo 一点成就感都没有,一因为我知道这不是我做的,二我也不懂他是怎么做到的。再看后面的就更晕了,一大堆专有名词,并且和前面的 Demo 基本没什么关系,最后看不下去就去看书了。 这个 Guide 给我的感觉就是似乎想把一本书的内容压缩成一个教程,什么都涉及到,什么也都没深入。新手还不如直接去看Agile Web Development with Rails来的有效率。

一句“元芳,你怎么看?”,给我弄得一头雾水,一分钟后,在http://weibo.com/1748466473/z0CakinIw 看到同样的问句,才想起来去 Google 一下……

#18 楼 @knwang #20 楼 @ugoa

从 knwang 的经验来看,的确是这样的。 对于初学者,只要了解了 MVC,或者以前接触过类似的东西,我往往会换一种思路进行解释。

先从新建一条 Route 开始(比如我想制作一个叫/testing 的页面),就会给出“找不到控制器”的错误;然后进而告知控制器的文件命名及相关规则,引导其建立一个匹配的 Controller。紧接着系统提示“Template”找不到的错误。再然后理所当然新建一个模板,一个新手写的 Hello world 诞生。水到渠成。

虽然这个例子不涉及数据库,但初学者往往能一下子对整个 ROR 的体系有非常直观的认识,并且会逐步主动尝试去修改模板变量等内容。这个过程远远比解释 Scaffold 生成的各个文件来得自然。

感同身受

#1 楼 @Teddy 不使用 scaffold 的话,重复性工作会让人抓狂的,那么好用的工具,为啥不用呢?实际项目中一直使用啊。

另:从使用 scaffold 开始学习,并不觉得有什么坑,相当顺畅的学习下来了,当然这个可能跟个人的学习方式或接受知识差异有关。

这个本来就是作秀用的,没太大作用,很少用。

Unknow user #26 October 17, 2012

其实。。。scaffold 我每一个项目都会用一次,仅此一次,剩下的都是 copy,然后复制,最后重命名,改类名。。。 跟我一样懒的人举手。。。

#25 楼 @hhuai #26 楼 @help5305fff 这个主要取决于项目的类型,涉及仓储库存之类的数据库应用会用得比较多,因为这类应用几乎是 CURD 的大集合。

不能拿着钳子去拧螺母

元方被我开了

个人感觉对有 mvc 基础知识或是大体概念的同学而言,会感觉 scaffold 很直观…

现在离不开 scaffold 了。

You need to Sign in before reply, if you don't have an account, please Sign up first.