4-1.ASP.NET Core Web API 入門教學 - 取得資料列表與DTO

ASP.NET Core Web API 入門教學

這篇就要開始講如何從資料庫讀取資料,接著會有一系列的讀取資料的做法,首先我們就先從最基本的開始講起。

我們要撈出News資料表中所有資料其實之前在設定資料庫的時候就有示範過了

[HttpGet]
public IEnumerable<News> Get()
{
    return _webContext.News;
}

非常簡單就可以讀取News資料表中所有的資料了

但這樣可能會有一個小問題,就是實務上我們可能並不想把所有欄位都撈出來,我只想給別人看特定的資料,其他是我內部紀錄或其他用途的資料

並不想給別人看到,這個時候該怎麼做呢?

以這個例子為例,我可能不想讓人知道我的InsertDateTime、UpdateDateTime和Enbale,因為這是我內部資料,沒必要撈出來給別人看

也不需要浪費流量撈這些資料出來,所以可以有以下寫法

[HttpGet]
public IEnumerable<object> Get()
{
    var result = from a in _webContext.News
                 select new
                 {
                     a.NewsId,
                     a.Title,
                     a.Content,
                     a.StartDateTime,
                     a.EndDateTime,
                     a.Click
                 };

    return result;
}

這樣,我們只寫上我們要呈現的欄位名稱,如此這支API就會如下圖

但這樣會有一個小問題,就是缺乏了可讀性和維護性,什麼意思?

簡單來說就是我們沒有去定義一個明確的型別,這會大幅降低日後的可維護性

如果有很多地方都用到,那不清楚定義一個型別,那更是需要,雖然會增加一開始的工作量,但定義型別絕對是必要的

因此我們可以增加一個NewsDto類別,我們這邊建立一個Dtos資料夾,專門來放Dto

接著在NewsDto中,定義出上我們需要撈出來的欄位

namespace WebAPI.Dtos
{
    public class NewsDto
    {
        public Guid NewsId { get; set; }

        public string Title { get; set; }

        public string Content { get; set; }

        public DateTime StartDateTime { get; set; }

        public DateTime EndDateTime { get; set; }

        public int Click { get; set; }
    }
}

那Dto是什麼呢?中文是建立資料傳輸物件

簡單來說,就是為了達成上面那個目的,所特別建立出來的物件,我們就可以為他結尾取名為Dto

用這個名稱的好處是,是一個習慣的用法,之後其他人看你的專案,也能夠直接了解這個類別的作用是什麼

這跟其他各種結尾命名的用法是一樣的,如我們一開始看到的Controller結尾命名法,就只是想讓人一眼,就可以先知道這個類別的用處是什麼

並不會因為這樣命名,有了什麼特殊功能喔~~~

所以原來的API程式我們可以這樣改寫

[HttpGet]
public IEnumerable<NewsDto> Get()
{
    var result = from a in _webContext.News
                 select new NewsDto
                 {
                     NewsId = a.NewsId,
                     Title = a.Title,
                     Content = a.Content,
                     StartDateTime = a.StartDateTime,
                     EndDateTime = a.EndDateTime,
                     Click = a.Click
                 };

    return result;
}

那當然,這個執行結果會跟之前的是一樣的,但整體的可讀性跟維護性則會大大提高

新手一開始或許還很難感受到好處,甚至可能覺得有點麻煩,但等你專案漸漸大了之後,就會有所體驗

所以現在還沒辦法理解沒關係,但這絕對是實務上必要的做法之一,用就對了

之後會陸續教到越來越多麻煩的做法,都是為了增加可讀性跟維護性

但並不是全部都必須套用,而是視情況使用,這我之後會在著重講解給大家聽

不過今天這個,我認為是90%情況都必須要套用的,剩下10%大概是那種亂寫交差了事就可以的那種XD

 

範例檔:下載

 

參考資料:

建立資料傳輸物件 (DTO)




Copyright © 凱哥寫程式 2022 | Powered by TalllKai ❤