Rails不是入門的好東西(gateway drug)

banq發表於2012-04-05
這是Dzone這幾天推薦排行榜的文章,有可能是作者的一面之詞,但可能也反映了某些問題,來自Rails is not a gateway drug - Yo Briefcase!

作者開頭說:他知道對Rails下一個死定義會面臨如何恐怖的地步,但是他還是想武斷地說:Ruby是一個頑固的重量級Web框架,不是人們宣稱那種大麻之類誘導性毒品(讓你感覺良好但不傷害你),很多人當試驗一下Rails以後,就會立即愛上Ruby和Rails,並且寫很長部落格來談自己如何把.NET或Java拋在腦後了,但是作者並不這麼認為,只有感覺是Rails讓自己落後了,已經使用它一個月,一直在憤怒中度過,充滿挫折,作者解釋了其中原因:

作者之前是.NET程式設計師,試驗了Ruby,並且開始進行.NET到Ruby移植,作者當時長舒了口氣,去他媽的.NET,比Java還差,我討厭你和你的味道。作者走上了Rails之旅程。

但是等到了作者寫這篇文章的時候,他感覺無比沮喪:
1.在命令列介面方面,CLI有太多特性,如果不深入研究幾乎無法使用,當他看到一些Railscasts.com文章後他總是問自己,這個傢伙是怎麼做到的?可選擇當然是好,但是Rails本來定位給初學者容易上手(約定大於配置),現在發現預設的選項並不是我的最佳選擇。

2.有太多魔術Magic,Rails是非常依賴約定的,但是有太多約定,以致於作者有幾次百思不得其解,一些約定有很好文件,但是其他沒有,這樣就感覺Rails有很多讓人搞不懂的魔術。

class HomeController < ApplicationController
  def index
  end
end
<p class="indent">

它等同於ASP.NET的MVC:

public class HomeController: Controller
{
  public ActionResult Index()
  {
      return View();
  }
}
<p class="indent">

.NET程式碼中return view()(Rails沒有)可以告訴我返回一個View試圖,這樣我能夠知道訪問home/index.cshtml,當我們增加更多類似方法時,一點點這樣的程式碼可以告訴我們區別,約定如果不清楚標註就不具有擴充套件性

3.消腫,在一個Rails應用中,你會使用很多類似腳手架的複製工具,你將會看到很多檔案:

rails generate scaffold MyEntity name:String age:Int                         !6580
      invoke  active_record
      create    db/migrate/20120403130542_create_my_entities.rb
      create    app/models/my_entity.rb
      invoke    test_unit
      create      test/unit/my_entity_test.rb
      create      test/fixtures/my_entities.yml
       route  resources :my_entities
      invoke  scaffold_controller
      create    app/controllers/my_entities_controller.rb
      invoke    slim
      create      app/views/my_entities
      create      app/views/my_entities/index.html.slim
      create      app/views/my_entities/edit.html.slim
      create      app/views/my_entities/show.html.slim
      create      app/views/my_entities/new.html.slim
      create      app/views/my_entities/_form.html.slim
      invoke    test_unit
      create      test/functional/my_entities_controller_test.rb
      invoke    helper
      create      app/helpers/my_entities_helper.rb
      invoke      test_unit
      create        test/unit/helpers/my_entities_helper_test.rb
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/my_entities.js.coffee
      invoke    scss
      create      app/assets/stylesheets/my_entities.css.scss
      invoke  scss
      create    app/assets/stylesheets/scaffolds.css.scss
<p class="indent">


...
其他見篇首作者文章和討論。

[該貼被banq於2012-04-05 10:10修改過]

[該貼被banq於2012-04-05 10:13修改過]

相關文章