昨天我們練習如何在Web API內使用JWT ,如何產生Token ,如何驗證Token 機制與如何驗證Token,而今天的話想要來說說Data Transfer Object(DTO,又稱資料傳輸物件)
ASP.NET CORE 開發中常見的事情是數據傳輸。在這種情況下,我們必須特別注意避免將來出現問題。一個好的做法是使用 DTO,它將定義如何通過網絡發送數據
在 .NET 的應用程序中,例如 API,數據庫中包含的數據被映射並發送到客戶端。如果直接這樣做,可能會出現許多問題,特別是如果您想操縱這些數據的發送和接收方式。要解決這些問題,您可以定義一個 DTO
在下面的流程圖中,客戶端向服務器請求 DTO 實體,服務器獲取域實體並在響應中返回 DTO 實體
說實話,我個人覺得在使用DTO 時跟我們平常從資料庫抓資料的方式很類似,但就只是我們先把要回傳的實體給寫好而已,話不多說,一開始我們就先拿之前User 的資料表來做練習
在Model下去新增DTO的檔案,檔名就自己設定就好,在之前的User 裡我們新增資料時會依Id、Name、Email、Phone、Sex 的property 來做設定,線自我們先假設我們要的資料只要Name、Email、Phone的話就會寫如下方
public class UserDetialDto
{
public string Name { get; set; }
public string Phone { get; set; }
public string Email { get; set; }
}
接下來我們就去創一支針對DTO 做使用的API
[HttpGet("UserDetal")]
public async Task<ActionResult<IEnumerable<UserDetialDto>>> GetUserDetalDto()
{
var user = await _context.Users.Select(u => new UserDetialDto
{
Email = u.Email,
Name = u.Name,
Phone = u.Phone
})
.ToArrayAsync();
if (user == null)
{
return BadRequest();
}
return user;
}
在這裡我們再用Select 去使用我們剛剛寫的DTO,這樣的用法很簡單,但在像我們這種比較簡單的例子上感覺不出差異,但是當出現在很大的專案的話,如果每個Controller 都要使用同一個model的話就會不好去維護,所以我們要去習慣使用DTO 的規則
實際結果
最後有發現我們在Select 裡這樣寫的方式好像不是哪麼美觀,這樣每個Property 都還是要自己寫,不如直接new {}
就好,所以就有好心人去寫了第三方套件(AutoMapper) 來減少這些程式的出現,這裡就不多說,大家可以去看這些大老的教學
今天雖然介紹的DTO 這東西感覺沒什麼困難的,它的出現一定都有它的意義,所以希望大家會喜歡這次的鐵人賽,那麼就先這樣啦~~~