我需要創建一個使用模型-視圖-控制器原理和 MySQL 資料庫的簡單專案。我想將 Spring Boot 與 Spring MVC 和 Spring Data JPA 一起使用。
我想發出 GET、POST、PUT 和 DELETE 請求來呼叫資料庫并將 JSON 發送到客戶端。
@GetMapping(value = "/users")
public Users getUsers() {
// call the service -> call the database
}
回應將是:
{
"name": "John",
"age": 45,
...
}
這個專案是否使用了 MVC 原理?還是我需要.jsp
為視圖使用一個完整的MVC原理?
所以控制器是 REST 控制器,模型是用戶 POJO。如果這個專案使用 MVC 原理,有人可以解釋視圖在哪里嗎?
如果服務呼叫存盤庫并從MySQL
資料庫中獲取資料我想知道 MVC 是否通過添加 DAO 被修改,或者 DAO 是模型的一部分?
uj5u.com熱心網友回復:
MVC是一種適用于應用程式層的架構設計模式。這正是您的應用程式的內部作業。
REST是您的應用程式與其他應用程式互動的方式。
您可以在一個應用程式中將它們組合在一起。
一般來說,它們是針對不同問題的不同模式:
您正在接收請求的MVC -> 處理它(從 DB 或通過某些方式獲取資料)-> 將其呈現到視圖 -> 并查看請求的資料回傳給呼叫者。
REST(Representational State Transfer )流程非常相似。但是,您的應用程式不會回傳帶有資料的視圖,而是僅發送資料的表示形式。回應的內容型別應由呼叫者在請求時指定。
現在逐個回答你問題的其他部分。(也許,一個問題回答得好,問題就太多了)
Does this project use the MVC principle? Or do I need to use a .jsp file for the view to have a complete MVC principle?
從您已經共享的片段中 - 您使用了REST - 并且您的方法回傳資源的JSON表示。
現在看起來這是您想要實作的預期目標:
And I want to make GET, POST, PUT and DELETE requests that call the database and send a JSON to the client.
如果你想使用 MVC,你必須回傳一個帶有獲取資料的渲染視圖。請記住,在這種情況下,您必須將HTML頁面回傳給呼叫者:
@Controller
@RequiredArgsConstructor
public class ControllerDemo {
private final UserService userService;
@GetMapping(value = "/users")
public String getAllUsers(Model model) {
// add fetched data to model as attribute
model.addAtribute("users", userService.findAll());
// view resolver should be configured to render response to `response-page.ftl` for example
return "response-page";
}
使用 JSP 或Freemarker或Mustache等都沒有關系- 主要思想是您創建模板,來自 DB 的資料將根據HTML頁面上的此模板表示。
So the Controller is the REST Controller and the Model is the Users pojo. And if this project use the MVC principle can somebody explain where is the view?
- 使用 REST 方法是沒有視圖的,這種情況下的回應是資源的表示。
And if the service calls the repository and fetch the data from the MySQL database I want to know if the MVC is modified by adding the DAO, or the DAO is a part of the Model?
DAO代表資料訪問層。你有一個模型 -User
描述你的物體的類。并且您將一些用戶物體存盤在DB中。并且您希望接收已存盤的所有用戶(在現實生活中您需要進行分頁,但為簡單起見我們省略了它)。
因此,要做到這一點,您必須逐行查找users
表并將行從 DB 轉換為User
物體。而你把這個檢索到單獨的資料層 - DAO
。
DAO不是 Model 的一部分,它是Model和DB之間的單獨層。
你不能在你的服務層做這件事 ( UserService
) 因為它會破壞服務層的簡單責任原則( SOLID 原則) - 做一項作業并把它做好。
同時,您支持應用程式部分的高內聚(GRASP 原則)
uj5u.com熱心網友回復:
MVC 是實作 UI 的模式。因此,如果您只是開發一個 REST API,則不涉及任何 UI,因此您無需關心它是否實作為 MVC。
相反,如果您正在開發 Web 應用程式,則視圖是將 HTML 代碼呈現給瀏覽器的技術。通常它們只是一個模板引擎,例如 JSP、FreeMarker 或 Thymeleaf,它允許您使用它們的運算式語言來訪問某些 Java 物件(即Model
)中的資料,以定義您想要生成為模板的 HTML 代碼。
在 Spring MVC 中,您需要@RestController
用于開發 REST API 而@Controller
用于 Web 應用程式。主要區別在于@RestController
包括@ResponseBody
哪些將繞過視圖決議程序,因為 REST API 中沒有視圖。
簡而言之,當您現在正在開發 REST API 時,沒有 UI 也沒有視圖。因此 MVC 在這里不適用,您不必擔心它是否基于 MVC 實作。
如果服務呼叫存盤庫并從 MySQL 資料庫中獲取資料,我想知道 MVC 是通過添加 DAO 修改的,還是 DAO 是模型的一部分?
DAO 是一個負責從 DB 獲取和管理資料的物件。它與模型無關。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/470604.html
上一篇:我正在嘗試在我的SpringBoot應用程式中添加一個jsp頁面。我的問題是,每次我嘗試訪問該頁面時,我都會遇到以下問題: