为什么Ruby on Rails专业人员不使用脚手架?
我有时候从长期以来似乎在使用rails的人那里学习,他们学到的一个重要的教训是“不要使用脚手架”。 同样在irc上,我从这个方向读到一些常见的提示。 我的问题是为什么,这有什么坏处呢? 而且nifty_scaffolding也不好?
我的猜测是,这是不好的,因为它默认生成一个控制器操作的xml版本,这将暴露我们的应用程序的字段名称给任何人,使它更容易受到攻击,所以也许是这样吗?
你不做脚手架的原因是什么?
我对rails有经验,很less使用scaffolding,因为我的最终目标远非简单的CRUD操作。 但是,没有严格的规定不使用脚手架。 有些编码者对此不以为然,因为它实际上是脚手架 。 这不是一个成品。 脚手架支持你build立实际的产品。 search谷歌图片的“脚手架”,你应该明白了。
请记住, scaffold
只是Rails中众多内置生成器之一 。 Rails生成器只是一个输出一些通用代码的脚本。 发电机是非常有用的节省时间,你会很快发现自己写自己的发电机满足您的自定义需求。
我相信大多数专业人士都避免使用脚手架,因为他们更喜欢使用testing驱动开发方法来编写产品代码。 这意味着他们希望先编写一个失败的testing,然后编写使testing通过的代码。 这是生成强代码的好方法,但它在最精细的层面上效果最好。 脚手架似乎同时做了太多事情,所以它破坏了为特定function编写失败testing的紧密循环,然后编写使特定function通过的代码。 在脚手架的易用性之外进入这个习惯可能更重要。
这表示脚手架本身可以非常强大。
了解使用钢轨生成脚手架并了解其局限性非常重要。 脚手架可以帮助你快速运行并testing一个假设。 但在现实世界中,它不会让你太过分。 比方说,你用脚手架创build了一个模型
rails generate scaffold Article title:string body:text
大! 你现在有一个原型准备好了。 但现在可以说,你必须添加另一个字段“作者”。
rails generate migration add_to_article_author author:string rake db:migrate
现在表格文章有一个新的列,但/ app / views / articles中的文件处于相同的旧状态,即表单不会有作者字段等。如果您再次运行scaffold
rails generate scaffold Article title:string author:string body:text --skip-migration
这次你已经添加了–skip-migrate,因为之前已经完成了,如果你再次迁移同一个表,Rails将会真的抱怨。 现在脚手架会提示你覆盖它第一次创build的文件。 覆盖也将销毁您对控制器/app/controllers/article_controller.rb所做的任何更改或查看诸如/app/views/article/show.html.erb或index.html.erb的文件
由于任何有价值的Rails应用程序都具有自定义代码(而不是由脚手架创build的样板代码),Rails程序员应该只使用脚手架来testing一个想法。 使用脚手架给你的客户玩的东西。 但是在现实世界中,不使用样板脚手架代码。
脚手架不是真正意义上的生产用途。 这意味着快速启动应用程序,然后可以修改或删除它。
Rails 3脚手架实际上是相当不错的,但它仍然缺乏一些处理嵌套资源的方法,并且不使用更简单的respond_with
(over respond_to
,这会鼓励在不需要或不受欢迎的地方使用冗长的方式)。
默认的脚手架表单不可能在未修改的情况下工作 – 您的模型之间可能存在翻译为数据库中的列的关系,如user_id
。 在创build具有关系的模型的脚手架时,该列显示为表单中的文本字段,当清楚地显示它应该从URL推断或通过另一个更加用户友好的界面select时。
有很多像这样的小细节使脚手架成为现成的即用即用代码的候选人。 当然,你可以通过生成脚手架来填充应用程序,然后填补空白,清理不需要的区域,而且我怀疑大多数Rails开发人员会在一定程度上做到这一点。
我不使用脚手架有两个原因:
- Rails的脚手架把所有东西放在一个html表格中 – 我不喜欢这个
- 我更喜欢使用rails_admin gem来pipe理我的pipe理页面,所以不需要90%的脚手架代码
您的xml担心不是人们build议不要使用脚手架的原因。 我不打扰我的网页的XML版本,因为它使您的应用程序必须生成的路线数量加倍,这反过来又增加了一些开销…
到目前为止,人们都说有经验的铁路程序员不使用脚手架,主要原因很好。 我主张初学者不要使用脚手架。
你可能一直在用脚手架开心地工作一段时间,然后你意识到你忘了在你的Post模型中包含已published
布尔型字段,所以你生成一个迁移来添加属性到表中(你已经设法工作出)。 然后,你还必须弄清楚如何将这个添加到脚手架的forms。 然后,对于你的生活,你不能解决为什么它不会更新,当你提交你的表格,经过很多的争吵和浪费时间,你发现你不允许在这个属性上的质量分配,如脚手架在其他人。 原来你对Rails的工作原理并不了解。
如果你正在学习Rails,那么如果你自己构build了V和C的话,你会更加了解MVC。
我认为脚手架是非常好的检查新的rails版本的新东西(例如现在在rails 4 params允许在控制器中的东西)。 您可以使用它进行快速原型devise。 通常很简单,不需要生成完整的脚手架。