iT邦幫忙

2022 iThome 鐵人賽

DAY 9
0
自我挑戰組

用 30 天和 ASP.NET Core 打造一個活動報名管理系統系列 第 9

ASP.NET Core - 活動報名管理系統:Day9 簡述 MVC 概念

  • 分享至 

  • xImage
  •  

前言

雖然前面的文章都只提到使用的框架以及 DB,不過我相信眼尖的人應該有發現到,這次的專案是使用 MVC 架構來進行開發。

相信大家都很常聽到 MVC 這三個字,那我自己還是想再用文字敘述一次 MVC 的概念,懂得人當複習,比較不熟的人,我們就一起學習!

關注點分離(Separate of Concerns)

真正提到 MVC 前,我們要先提到一個名詞:「關注點分離」,從字面上應該可以猜到,我們要將某些事物分清楚。

我們都希望,在開發 Function 時,希望這個 Function 越單純越好,但甚麼叫做單純?

比如說有個可以 Response Current DateTime 的 API,我們就只希望它很單純的回應日期就好,不要回應一個使用者名稱之類的額外資訊,否則使用者可能會覺得一頭霧水。

對系統架構也是一樣,資料處理邏輯(Model)、頁面顯示(View)、資料傳遞(Controller)切分得清楚,後續有人接手或是與其他人共同開發時,維護和擴充也相對清楚一點,這就是 MVC 的作用,更詳細還可以分出 Repository、Service 等,這就會提到 Design Pattern 了,不過今天不會說明。

HTML、CSS、JS 是不是一種 SoC 的實現?肯定是的吧!SoC 概念就是這樣,只要符合概念,就是一種實現,宏觀到系統與系統之間,也不是不行呢。

Model

Model(資料模型)負責到資料庫取得資料,並且將資料持有著待後續交給 Controller,也負責系統的商業邏輯,一般來說 Model 可能會是擁有最多程式碼的地方。

但為了避免資料存取與商業邏輯擺在同個地方會越來越肥,多數的開發者會再切出 Services 層,為此減輕 Model 的程式碼。

View

View(檢視 or 視圖),簡單講就是畫面,接收由 Controller 傳過來的資料,並顯示在使用者眼前。

View 它或許會有許多的程式碼,但這些程式碼絕對是很單純的負責顯示資料,最多最多就是根據狀態判斷是否要顯示指定元件。

View 絕對不該負責任何的商業邏輯,即使微軟的 cshtml 提供了 Razor,好讓開發者可以用 C# 寫一些邏輯並交由框架轉成 HTML,但這絕對不會是個好方法,邏輯就該放在 Model(Services)。

Controller

Controller 可以當作 Model 與 View 之間的橋樑,並作為流程管理的腳色。

Model 向 DB 取資料,並經過商業邏輯處理後丟給 Controller;Controller 依據指定流程判斷要丟到哪個 View 或是呼叫其他 Function。

流程會像是:

  • 瀏覽這個頁面,會員需要先登入嗎?
  • 應該顯示哪一個錯誤訊息?
  • 這個會員的權限可以查看此頁面嗎,若不行應該導向到哪?

反之一樣,View 丟資料到 Controller,依據流程丟到 Model,Model 再將資料傳到 DB 中。

本日結語

當初聽到 SoC 這個概念時,才恍然大悟,原來自己在開發功能或是系統構想時,一個一個把 Function 設計的越符合該功能越好,並且要是單純的,或是在畫系統設計圖時,把功能寫的越細越好,都是一種 SoC 的實現。

SoC 的概念,我認為不只可以應用在程式開發,在現實生活中,安排事情、切分工作內容,我覺得都有很大的幫助。

然後這幾天突然有臨時的繁忙外務QQ,如果文章太水的話,再請見諒:(

那麼今天的內容就到這囉,我們明天見!

Reference

MVC架構是什麼?認識 Model-View-Controller 軟體設計模式
ASP.NET Core MVC 概觀


上一篇
ASP.NET Core - 活動報名管理系統:Day8 EF Core FluentAPI - 2
下一篇
ASP.NET Core - 活動報名管理系統:Day10 AOP Aspect-Oriented Programming
系列文
用 30 天和 ASP.NET Core 打造一個活動報名管理系統30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言