后端(應用層)不同于前端,最重要的概念是 middleware/pipeline.
Rails能較為深入的理解一定要建立在對后端整體架構理解架構的基礎上,不然就會進入開始很爽越來越暈的尷尬節(jié)奏。
大致分為兩大部分:Server/App,一個負責接收分發(fā) request,一個負責業(yè)務邏輯,他們之間的數據對接靠 Rack 規(guī)范。Server 具體可參考這篇文章。而 App 部分就是 Rails。
Rails干的活一句話就是一個按照 Rack 標準數據格式化的 Request 進來,分析url,分配給它一個 Handler 方法處理:
- 解析 url 參數,HTTP header/body
- 身份驗證,權限驗證
- Database操作
- 渲染需要返回的數據(html/json)
當然為了控制 App 的邏輯復雜度,Rails 采用 MVC 架構,遵循 convention over configuration,don't repeat yourself 理念,盡量將 Server API 設計的 restful.
Rails 重要的組件都是根據 Handler 來,ActionController,ActiveRecord(ORM),ActiveView(view).
然后對一個項目還有:配置,第三方庫管理(bundler),測試(RSpec/factory_girl)
這里要提一下Rspec,對于魔法語言 Ruby 來說,只有相對完善的測試(最好TDD)心里才踏實,推薦一本書《Everyday Rails Testing With RSpec》。
有時有些 Request 是好是操作,我們需要后臺任務,需要了解 sidekiq.
對于 HTML 有時可能需要 Cache,這時簡單粗暴的內存KV數據庫 memcached。
有哪些地方容易寫出坑:
- 低效 SQL,所以對 SQL 也要有一定了解,知道一個鏈式 ActiveRecord 操作背后執(zhí)行的哪條 SQL,而且對所用數據庫(MySQL/Postgresql/MongoDB)有一定了解。
- 盡可能不要在 View 中寫業(yè)務邏輯。
- Controller 中有過多邏輯。
- 當我們把邏輯從 Controller 遷入 Model,Model 會迅速臃腫起來。
對 Ruby 的理解需要達到什么程度?看懂《Ruby元編程》。
拓展閱讀: