天天看點

Contrller應該做什麼

看看這段代碼:

class TaskController < ApplicationController
  active_scaffold :tasks

  protected

  def before_update_save(record)
    record.updated_by = current_user
  end
end
           

我們常常要讨論一段邏輯放在哪裡,頁面和controller之間一般好說,問題在于業務層和controller之間。而這個例子很典型,current_user這樣的資訊不可能在業務層得到,因為這是狀态資訊,而controller可以提供這些。

在RIA的沖擊下,controller的功能不再包含大量使用者UI的互動邏輯,是以它的價值也就凸現了出來──會話,這才是controller真正擅長的地方。從這個意義上說,我們從前搞不清楚的業務邏輯層/服務層/表現層的架構體系,現在可以用更加容易了解的架構進行代替了:業務邏輯層/會話層/表現層

這裡,唯一不變的僅僅是業務邏輯層,其它兩個都要說明:

會話層就是controller,在一個無狀态的架構中,最終将使用者狀态與後端業務聯系的就是這個會話層──它的職責也僅此而已。

表現層一般對應我們常說的html/js/css等,它是RIA的,它自己有MVC結構,由于都在浏覽器上,是以具備很好的使用者響應能力。

換個角度看,有了會話層和表現層,這個系統架構再加上tcp/ip協定,看看像不像osi七層?

也許開放系統體系結構(OSI)的7層協定本來就是網絡架構和應用架構銜接的結果