擴充閱讀
Java Servlet 教程-20-自己手寫實現 spring mvc 整體思路
Java Servlet 教程-21-自己手寫 spring mvc 簡單實現
Spring Web MVC-00-重學 mvc
mvc-01-Model-View-Controller 概覽
mvc-02-structs 介紹
web mvc-03-JFinal
web mvc-04-Apache Wicket
web mvc-05-JSF JavaServer Faces
web mvc-06-play framework intro
web mvc-07-Vaadin
web mvc-08-Grails
從零手寫元件系列
java 從零手寫 spring ioc 控制反轉
java 從零手寫 spring mvc
java 從零手寫 jdbc-pool 資料庫連線池
java 從零手寫 mybatis
java 從零手寫 hibernate
java 從零手寫 rpc 遠端呼叫
java 從零手寫 mq 訊息元件
java 從零手寫 cache 快取
java 從零手寫 nginx4j
java 從零手寫 tomcat
MVC 是什麼?
MVC(Model-View-Controller)是一種軟體設計模式,旨在將應用程式的內部邏輯分離成三個主要元件,以提高程式碼的可維護性和可擴充套件性。
每個元件負責不同的任務,互相之間解耦,使得應用程式更容易理解和修改。
1. 模型(Model):
模型是應用程式的資料和業務邏輯的表示。它負責處理資料的儲存、檢索、更新以及業務規則的實施。模型不依賴於使用者介面或控制流程,而是專注於處理應用程式的資料和業務邏輯。在典型的應用中,模型通常包含資料庫訪問、檔案操作、遠端服務呼叫等。
2. 檢視(View):
檢視是使用者介面的表示,負責呈現模型的資料給使用者以及接收使用者的輸入。檢視通常是被動的,它根據模型的狀態自動更新。檢視並不直接處理使用者輸入或應用程式的業務邏輯,而是將這些任務委託給控制器。在 Web 應用中,檢視可以是 HTML 頁面、CSS 樣式表等。
3. 控制器(Controller):
控制器是處理使用者輸入並相應地更新模型和檢視的元件。它充當模型和檢視之間的中介,負責協呼叫戶介面的響應和資料的更新。當使用者與應用程式進行互動時,控制器捕獲使用者輸入並呼叫適當的方法來更新模型或檢視。在 Web 應用中,控制器通常是處理 HTTP 請求的元件。
工作流程:
-
使用者輸入: 使用者與應用程式進行互動,提供輸入。
-
控制器處理: 控制器捕獲使用者輸入,根據輸入呼叫適當的方法。
-
模型更新: 模型處理業務邏輯,更新資料狀態。
-
檢視更新: 檢視根據新的模型狀態自動更新,將更新後的資料呈現給使用者。
-
使用者輸出: 使用者看到更新後的介面,可以再次提供輸入。
這個分層結構使得每個元件都可以獨立開發和測試,同時保持彼此之間的解耦。這種模式使得應用程式更容易擴充套件和維護,因為修改一個元件不會影響其他元件的功能。
示例:
考慮一個簡單的購物車應用:
- 模型: 負責儲存商品資訊、計算總價等。
- 檢視: 負責展示購物車中的商品和總價。
- 控制器: 負責處理使用者的新增商品、刪除商品等操作,並更新模型和檢視。
User Input -> Controller -> Model (Update) -> View (Update) -> User Output
MVC 模式的靈活性和分離關注點的設計使其在各種軟體應用中廣泛應用,包括桌面應用、Web 應用和移動應用。
為什麼需要 mvc?有什麼優勢?
MVC 架構被廣泛採用的原因是它提供了許多優勢,使得軟體開發更加模組化、可維護和可擴充套件。
以下是一些使用 MVC 的優勢:
-
分離關注點(Separation of Concerns): MVC 將應用程式分為三個獨立的元件,每個元件負責不同的任務。這種分離簡化了程式碼的理解、維護和擴充套件,因為開發人員可以專注於特定方面的開發,而不必擔心整個應用程式的複雜性。
-
可維護性: 由於模型、檢視和控制器分離,對一個元件的修改不會影響其他元件。這使得修改、擴充套件和維護應用程式變得更加容易,因為不同的部分是相對獨立的。
-
可擴充套件性: 由於每個元件都是相對獨立的,因此可以輕鬆地新增新的功能或更改現有功能,而不會影響整體的應用程式結構。這使得應用程式更容易適應變化的需求。
-
可重用性: 每個元件都可以在不同的上下文中重複使用。例如,可以重用相同的模型邏輯在不同的檢視中展示資料。這種可重用性降低了程式碼冗餘,提高了開發效率。
-
易測試性: 由於模型、檢視和控制器是相對獨立的,可以更容易地進行單元測試。開發人員可以專注於測試每個元件的功能,確保其正常工作而不必考慮整個應用的複雜性。
-
提高團隊協作: MVC 提供了清晰的架構和元件劃分,有助於多個開發人員或團隊協同工作。每個元件都有特定的職責,因此不同的開發者可以專注於各自領域,降低了溝通和合作的難度。
-
支援並行開發: 由於 MVC 分離了關注點,不同的團隊成員可以並行開發各個元件,而不會相互干擾。這有助於提高開發速度和整體專案的交付效率。
總體而言,MVC 架構的引入使得軟體開發更加模組化、靈活和可維護,有助於構建健壯、可擴充套件的應用程式。
java 的 mvc 框架對比
Java 的 MVC 框架有很多,以下是一些常見和流行的 Java MVC 框架:
框架 | 主要特點和設計理念 | 適用場景 |
---|---|---|
Spring MVC | - 繼承 Spring 框架,強大的生態系統 - 註解驅動的開發 - 高度可定製化 |
企業級應用程式,大型專案 |
Struts 2 | - 繼承自 Struts 框架 - 攔截器機制 - 標籤庫和表單驗證 |
Web 應用程式,中小型專案 |
JSF | - JavaServer Faces 規範 - 元件化開發方式 - 強調可重用元件 |
複雜的使用者介面,企業級應用程式 |
Play Framework | - 響應式程式設計 - 簡化開發流程,約定大於配置 - 支援 Scala 語言 |
快速開發,輕量級 Web 應用,RESTful 服務 |
Vaadin | - 用 Java 編寫使用者介面邏輯 - 伺服器端渲染 - 資料繫結和元件化 |
企業級應用程式,需要強大使用者介面的專案 |
Grails | - 基於 Groovy 的框架 - 領域特定語言(DSL) - 使用 Spring MVC |
快速開發,Groovy 語言,中小型專案 |
Apache Wicket | - 物件導向的程式設計方式 - 元件化開發,面向元件程式設計 - 伺服器端渲染 |
複雜的使用者介面,物件導向的設計,中小型專案 |
JFinal | - 基於 Java 的輕量級框架 - 簡單易用,約定大於配置 - ActiveRecord 模式 |
快速開發,中小型專案 |