[英]Data Trasfer Objects Between Layers in Domain Driven Design
域層通過數據傳輸對象(DTO)與其他層進行通信。 我對DTO感到困惑。
DTO 1位於域和表示層之間。
DTO 2位於域和數據層之間。
我應該在圖層之間創建兩個不同的DTO對象還是僅創建一個DTO。 專業方式是哪種?
讓我們瀏覽所有圖層:
通常它知道Domain Entities
和域層。
DAL可以返回Domain Entities
或DTOs (DB oriented data structures)
。 如果需要,可以使用這些DTO或域實體來構建表示層( view models
)的DTO。
域實體通常很繁重,需要數據映射器或任何ORM。 我更喜歡使用Domain Entities
,映射它們並避免使用其他DTO。 否則也應該映射DTO。
域層應該對實體存儲在某處的方式一無所知(例如在DB中)。 它可以有自己的DTO,它可以是重構引入參數對象的結果 。
它應該知道Data Access Layer
從數據庫和Domain Layer
加載數據以訪問其業務邏輯。
它可以有自己的DTO - 視圖模型,它們是域實體或DB友好DTO的用戶界面友好表示。 表示層負責了解view models
。
如果您只有一個演示文稿,您的Application Infrastructure也可以作為表示層的一部分實現,但通常它是一個單獨的應用程序層。
這實際上取決於您的具體需求。
一般來說,你應該創建2套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.