演習 - データ ストアを追加する

完了

ピザ用の Web API の実装を始める前に、操作を実行できるデータ ストアが必要です。

インベントリ内のピザを表すには、model クラスが必要です。 このモデルには、ピザの特徴を表すプロパティを含めます。 モデルは、Web API にデータを渡すため、また、データ ストアにピザ オプションを保持するために使用されます。

このユニットでのそのデータ ストアは、簡単なローカル メモリ内キャッシュ サービスです。 実際のアプリケーションでは、Entity Framework Core で SQL Server などのデータベースを使うことを検討します。

ピザ モデルを作成する

  1. 次のコマンドを実行して、Models フォルダーを作成します。

    mkdir Models
    

    Visual Studio Code で Models フォルダーを選んで、Pizza.cs という名前の新しいファイルを追加します。

    Screenshot of adding a new file to the Models folder in Visual Studio Code.

    プロジェクトのルートに、Models ディレクトリと空の Pizza.cs ファイルが含まれるようになります。 ディレクトリ名 Models は規則です。 ディレクトリ名の由来は、Web API で使用している Model-View-Controller アーキテクチャです。

  2. 次のコードを Models/Pizza.cs に追加し、変更を保存します。 このクラスにはピザを定義します。

    namespace ContosoPizza.Models;
    
    public class Pizza
    {
        public int Id { get; set; }
        public string? Name { get; set; }
        public bool IsGlutenFree { get; set; }
    }
    

データ サービスを追加する

  1. 次のコマンドを実行して、Services フォルダーを作成します。

    mkdir Services
    

    Visual Studio Code でそのフォルダーを選んで、PizzaService.cs という名前の新しいファイルを追加します。

    Screenshot of Visual Studio Code that shows adding a new file to the Services folder.

  2. 次のコードを Services/PizzaService.cs に追加し、変更を保存します。 このコードでは、メモリ内のピザ データ サービスを作成します。

    using ContosoPizza.Models;
    
    namespace ContosoPizza.Services;
    
    public static class PizzaService
    {
        static List<Pizza> Pizzas { get; }
        static int nextId = 3;
        static PizzaService()
        {
            Pizzas = new List<Pizza>
            {
                new Pizza { Id = 1, Name = "Classic Italian", IsGlutenFree = false },
                new Pizza { Id = 2, Name = "Veggie", IsGlutenFree = true }
            };
        }
    
        public static List<Pizza> GetAll() => Pizzas;
    
        public static Pizza? Get(int id) => Pizzas.FirstOrDefault(p => p.Id == id);
    
        public static void Add(Pizza pizza)
        {
            pizza.Id = nextId++;
            Pizzas.Add(pizza);
        }
    
        public static void Delete(int id)
        {
            var pizza = Get(id);
            if(pizza is null)
                return;
    
            Pizzas.Remove(pizza);
        }
    
        public static void Update(Pizza pizza)
        {
            var index = Pizzas.FindIndex(p => p.Id == pizza.Id);
            if(index == -1)
                return;
    
            Pizzas[index] = pizza;
        }
    }
    

    このサービスにより、既定で 2 つのピザが含まれる簡単なメモリ内データ キャッシュ サービスが提供されます。 この Web API では、デモの目的でそのサービスを使います。 Web API を停止して起動すると、PizzaService のコンストラクターにより、メモリ内データ キャッシュは 2 つの既定のピザにリセットされます。

Web API プロジェクトをビルドする

次のコマンドを実行して、アプリをビルドします。

dotnet build

ビルドは警告なしで成功します。 ビルドに失敗した場合は、出力でトラブルシューティング情報を確認してください。

次のユニットでは、Pizza モデルと PizzaService クラスを使用するコントローラーを作成します。