[英]Microservices Restful API - DTOs or not?
我想在微服務的上下文中重新提出這個問題。 這是原始問題的引用。
我目前正在為一個項目創建一個 REST-API,並且一直在閱讀有關最佳實踐的文章。 許多人似乎反對 DTO,只是簡單地公開領域模型,而其他人似乎認為 DTO(或用戶模型或任何你想稱呼的)是不好的做法。 就個人而言,我認為這篇文章很有意義。
但是,我也理解 DTO 的缺點,包括所有額外的映射代碼、可能與其 DTO 對應物 100% 相同的域模型等等。
我更傾向於在我的應用程序的所有層中使用一個對象(換句話說,只公開域對象而不是創建 DTO 並手動復制每個字段)。 並且可以使用 Jackson 注釋(如@JsonIgnore
或@JsonProperty(access = Access.WRITE_ONLY)
或@JsonView
等)解決我的 Rest 合約與域對象之間的差異。 或者,如果有一兩個字段需要使用 Jackson Annotation 無法完成的轉換,那么我將編寫自定義邏輯來處理這個問題(相信我,我在 5 年多的時間里甚至沒有遇到過這種情況休息服務的長途旅行)
我想知道我是否因為不將域復制到 DTO 而遺漏了任何真正的不良影響
我會投票支持使用 DTO,原因如下:
mybatis.configuration.map-underscore-to-camel-case: true
例如mybatis.configuration.map-underscore-to-camel-case: true
, spring.jackson.property-naming-strategy: SNAKE_CASE
短篇小說,至少在我的情況下,缺點並沒有超過優點,因此通過將新的 POJO 作為 DTO 來重復自己沒有任何意義。 更少的代碼,更少的錯誤機會。 因此,繼續公開域對象而不是擁有單獨的“視圖”對象。
免責聲明:這可能適用於您的用例,也可能不適用。 這個觀察是根據我的用例(基本上是一個具有 15 個端點的 CRUD api)
如果您使用 CQRS,這個決定會簡單得多,因為:
Commands
; Aggregates
- 域層中的豐富行為對象 - 不會公開/查詢,因此那里沒有問題。readmodel
。 在最壞的情況下,您可以使用 GraphQL 之類的東西來僅選擇您需要的字段。如果您不將讀取與寫入分開,那么決策將更加困難,因為這兩種解決方案都需要權衡。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.