MVC

閱讀時間約 3 分鐘
MVC是一套網頁開發的架構流程,代表著從前端到後端的各自分工。

M: Model
model 為一個虛擬的資料庫,但並非真實的資料庫,真正的資料庫還是得由正統的資料庫程式來扮演。在 Rails 裡,建立 model 能夠產生資料表 tables 的文字描述檔,接著透過 rails db:migrate 將資料表具象化後,就能將 tables 轉化成真正的資料庫並儲存資料了。
model 所扮演的角色是 controller 與資料庫之間的橋樑,將 controller 的 action 需要的資料,透過 model 以 SQL 語法轉譯向資料庫搜尋並提取資料,再把資料丟給 controller,或是將 controller 從 view 得到的資料,丟給 model,model 會再將 controller 給過來的資料,自行透過 SQL 語法,把資料儲存進資料庫裡。
由於 model 是負責與資料庫進行聯繫的地方,所以資料的驗證,主要是寫在 model 上,在 rails 裡,則是在 model 新增 validates 方法。
另外,多個 model 建立的 tables 們能夠透過primary_key, foreign_key 或是 belongs_to / has_one / has_many,將彼此的資料產生關聯。
腦的角色:所有的資料驗證都放在 model 內,包含商業邏輯,因為 model 就像大腦,負責處理「知不知道」的事情,比方說某個資料的處理需要先驗證 user 存不存在或是params 與資料庫有沒有吻合,這些都是跟大腦判斷有關的事情。

V: View
view 的功能主要是呈現出 controller 裡與 view 相對應的 action 所取得的資料在畫面上,或是將使用者於前端輸入的資料,送到 controller 進行後續處理。
通常不會在 view 裡進行任何的邏輯運算或是主動向任何地方討資料,view 唯一只需要做的就是呈現收到的資料或是將被給予的資料丟給 controller。
眼的角色:view 主要就是負責視覺,觀看,閱讀。

C: Controller
controller 可以算是整個架構的手腳,工具人的概念。controller 裡有很多 action。當 controller 收到請求觸發 action 時,就會開始執行 action 裡的 code,並在需要資料的時候,向 model 請求,取得資料後,再丟給 view。很顯然,controller 主要是負責資料運算與搬運。
手腳的角色:controller 就是負責所有的動作,所以裡面的 methods 才會叫 action,這個資料我要、這個資料我不要(白名單),這個資料拿給 model,這個資料拿給 view。所以 controller 通常不會太肥大,而 model 則會比較肥大。

Routes
在 rails 裡,多了一個像是地圖導覽的東西叫 routes,專門建立該用什麼方法執行網址路徑,而網址路徑會去呼叫相對應的 controller 及 action,進而呈現 MVC 的循環。
    1會員
    13Content count
    留言0
    查看全部
    發表第一個留言支持創作者!
    Mike的沙龍 的其他內容
    直接來看範例吧
      一切的重點就是在利用文字排版與語言解構使程式碼more「readable」   範例如下列網址,有興趣深入了解可進去觀看
    1. p1 = Product.new(name:"衛生紙") 接著執行 p1.stores = s1 卻出現 undefined method "each"的錯誤訊息。(如下圖一) 解決方法: 強制給實體掛上store_id 接下來處理Product
    在第一次建立rails專案時,通常都會遇到不少問題,像我是使用windows系統,所以也經歷了一些麻煩。如果各位第一次建立rails專案就可以看到下圖綠色字體的成功字樣,那真的如天選之人般幸運阿~ 如果你跟我一樣注定要經歷windows系統的苦痛,就請繼續看下去吧QQ
    public: 完全公開的方法,內外皆可存取。 private: 對外限制,不能有特定的receiver,故僅能在類別方法裡使用,且不能有receiver。 protected : 對外有限制,不能有receiver,但在class裡面則可有receiver也可以沒有receiver。
    直接來看範例吧
      一切的重點就是在利用文字排版與語言解構使程式碼more「readable」   範例如下列網址,有興趣深入了解可進去觀看
    1. p1 = Product.new(name:"衛生紙") 接著執行 p1.stores = s1 卻出現 undefined method "each"的錯誤訊息。(如下圖一) 解決方法: 強制給實體掛上store_id 接下來處理Product
    在第一次建立rails專案時,通常都會遇到不少問題,像我是使用windows系統,所以也經歷了一些麻煩。如果各位第一次建立rails專案就可以看到下圖綠色字體的成功字樣,那真的如天選之人般幸運阿~ 如果你跟我一樣注定要經歷windows系統的苦痛,就請繼續看下去吧QQ
    public: 完全公開的方法,內外皆可存取。 private: 對外限制,不能有特定的receiver,故僅能在類別方法裡使用,且不能有receiver。 protected : 對外有限制,不能有receiver,但在class裡面則可有receiver也可以沒有receiver。
    你可能也想看
    Thumbnail
    重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
    Thumbnail
    近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
    Thumbnail
    重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
    Thumbnail
    近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!