我目前正在開發一個全堆疊 Web 應用程式作為一個愛好專案。
我的技術堆疊是:
- MySql 資料庫
- SpringBoot RestApi 后端與 JPA 進行資料庫互動
- Vue 前端
我已經為資料庫建模并為資料庫中的所有表創建了 jpa 物體。資料模型包括一些雙向關系(多對多關系)。然后我開始為前端創建一些 API 端點以與之互動,但是在決定如何將資料序列化并發送到前端時遇到了一些問題。
在大多數教程和示例中,直接類似于資料庫物件的物件被序列化,然后發送到前端。但我不希望這樣,主要是因為創建不可序列化遞回的雙向關系,還因為并非資料庫中物件的所有資料都打算發送到前端。
所以我想知道資料庫(jpa)物件和序列化然后發送到前端的物件之間的分離/轉換通常是如何實作的。
我有一些想法,但我不知道它們在現實世界中的可行性:
想法 1:為所有物體創建單獨的前端類,其中僅包含必須發送到前端的資料。但這可能會產生額外的問題,因為在每個請求/應答中類之間的持續轉換。
想法 2:僅將所有關系的“原始”物件作為 Id 發送,并阻止所有“不需要的”資料進行序列化。在這種情況下,前端現在必須向后端發出更多請求,以便將所有這些 id 決議為所需的資料。
uj5u.com熱心網友回復:
想法 1 正是它通常的做法。您所稱的“前端類”通常稱為資料傳輸物件(DTO),它們本質上是存盤在資料庫中的資料的“視圖”,專門針對從后端到前端的傳輸有效性(通過多個相關物體的聚合)和前端易于使用(顯示)。
轉換問題是一個已知的問題,并且通過允許在 DB 物體和 DTO 之間(半)自動轉換的所謂“映射器”非常成功地解決。這種映射器的一個很好的例子是MapStruct( https://mapstruct.org/documentation/stable/reference/html/ ),它很好地與 Spring 和 Lombok 集成,并支持 IntelliJ Idea。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/471008.html
