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

suriv · 2012年10月16日 · 最后由 hardywu 回复于 2014年02月19日 · 6232 次阅读

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

我认为一个良好的帮助,应该是教初学者一步一步创建出 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 开始学习,并不觉得有什么坑,相当顺畅的学习下来了,当然这个可能跟个人的学习方式或接受知识差异有关。

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

匿名 #26 2012年10月17日

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

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

不能拿着钳子去拧螺母

元方被我开了

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

现在离不开 scaffold 了。

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