1. 程式人生 > >資料傳輸物件的作用

資料傳輸物件的作用

  在DDD領域驅動開發中會用到資料傳輸物件(Data Transfer Objects),下面是對資料傳輸物件作用的總結

1、抽象領域層  

  在展現層中資料傳輸物件對領域物件進行了有效的抽象。這樣你的層(layers)將
被恰當的隔離開來。甚至當你想要完全替換展現層時,你還可以繼續使用已經存在的
應用層和領域層。反之,你可以重寫領域層,修改資料庫結構,實體和 ORM 框架,
但並不需要對展現層做任何修改,只要你的應用層沒有發生改變。

2、資料隱藏

  想象一下,你有一個User實體擁有屬性Id, Name, EmailAddress和Password。
如果 UserAppService 的 GetAllUsers()方法的返回值型別為 List<User>。這樣任何
人都可以檢視所有人的密碼,即使你沒有將它列印在螢幕上。這不僅僅是安全問題,
這還跟資料隱藏有關。應用服務應只返回展現層所需要的,不多不少剛剛好。

3、序列化&惰性載入  

  當你將資料(物件)返回給展現層時,資料有可能會被序列化。舉個例子,在一個
返回 Json 的 MVC 的 Action 中,你的物件需要被序列化成 JSON 併發送給客戶端。
直接返回實體給展現層將有可能會出現麻煩。

  幾乎所有的 ORM 框架都支援惰性載入。只有當你需要載入實體時它才會被加
載。比如 User 型別引用 Role 型別。當你從資料庫獲取 User 時,Role 屬性並沒有
被填充。當你第一次讀取 Role 屬性時,才會從資料庫中載入 Role。所以,當你返回
這樣一個實體給展現層時,很容易引起副作用(從資料庫中載入)。如果序列化工具
讀取實體,它將會遞迴地讀取所有屬性,這樣你的

總結:以上內容摘抄自:ABP開發指南第二章第二節