簡體   English   中英

數據在域驅動設計中傳遞層之間的對象

[英]Data Trasfer Objects Between Layers in Domain Driven Design

在此輸入圖像描述

域層通過數據傳輸對象(DTO)與其他層進行通信。 我對DTO感到困惑。

DTO 1位於域和表示層之間。

DTO 2位於域和數據層之間。

我應該在圖層之間創建兩個不同的DTO對象還是僅創建一個DTO。 專業方式是哪種?

讓我們瀏覽所有圖層:

  • 數據訪問層(DAL) 它用於從數據庫(DB)獲取數據。

通常它知道Domain Entities和域層。

DAL可以返回Domain EntitiesDTOs (DB oriented data structures) 如果需要,可以使用這些DTO或域實體來構建表示層( view models )的DTO。

域實體通常很繁重,需要數據映射器或任何ORM。 我更喜歡使用Domain Entities ,映射它們並避免使用其他DTO。 否則也應該映射DTO。

  • 域層(域模型) 它用於表示業務實體及其行為,業務規則,純業務邏輯。

域層應該對實體存儲在某處的方式一無所知(例如在DB中)。 它可以有自己的DTO,它可以是重構引入參數對象的結果

  • 表示層(UI) 它用於向用戶呈現UI。

它應該知道Data Access Layer從數據庫和Domain Layer加載數據以訪問其業務邏輯。

它可以有自己的DTO - 視圖模型,它們是域實體或DB友好DTO的用戶界面友好表示。 表示層負責了解view models

如果您只有一個演示文稿,您的Application Infrastructure也可以作為表示層的一部分實現,但通常它是一個單獨的應用程序層。

在此輸入圖像描述

這實際上取決於您的具體需求。

一般來說,你應該創建2套DTO。 這樣可以更好地分離不同的層,並使系統的架構更加靈活。 需要它的具體原因或情況例如:

  • 共享DTO可能是不可能的,例如因為所使用的技術存在差異,例如,Web服務和數據層是用C#編寫的,而表示層是用Java編寫的。
  • DTO不一定相同,即您與數據庫層交互的DTO可以在數據庫結構上建模,但您可以將它以不同方式暴露給表示層。

話雖如此,如果你能忍受一套DTO的限制,你可以分享它們,如果它適合你的需要,因為它產生更少的代碼來編寫和維護。

您的圖像顯示了兩個名為DTO1和DTO2的DTO對象。

DTO1在表示層和domian層之間共享數據。 您可以將它們稱為ViewModel類。

DTO2在域和數據層之間共享數據。 您可以將它們稱為數據傳輸對象( DTO )。

所以你可以使用兩個不同的傳輸對象。

如果我們假設您使用兩個分開的DTO(DTO1和DTO2),
答案很簡單:

在這種情況下,您必須創建兩個單獨的DTO:DTO1和DTO2。
即使它們是相同的,它們也應該作為單獨的類實現。

這是因為DTO1是在域層中創建的,但DTO2是在數據層中創建的(根據您的圖片)。

請注意,在某些解決方案中,未使用兩個DTO - 有時,只有一個DTO。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM