💻

Avanade Beef の参照データ (Reference Data) を理解する

2022/09/27に公開

はじめに

Avanade Beef (以下、Beef) は ASP.NET Core をベースとする Web API の自動生成ツールです。

https://github.com/Avanade/Beef

概要については以下のスライドもご覧ください。

参照データとは

Beef には通常のエンティティのほかに参照データと呼ばれる機能を提供します。参照データが何かについては公式で説明されています。

https://github.com/Avanade/Beef/blob/v4.2.20220531/docs/Reference-Data.md

ざっくりと意訳するとこんな感じです。

  • 参照データ: アプリケーションにおける選択肢を提供するデータ。更新されることはほとんどない。国、性別、支払い方法など。
  • マスター データ: 現在の状態を維持するために継続的に保守されるデータ。中程度の頻度で更新される。顧客、仕入先、製品など。
  • トランザクション データ: 特定のイベントや処理を管理するために記録されるデータ。発注書、請求書など。

アプリケーションの実装レベルでいうと参照データとは列挙型に該当します。列挙型と異なるのは、列挙型は標準では値に対応する名前を持たないのに対して、参照データは値 (Code) と名前 (Text) をセットで持つことができる点にあります。エンティティからは疑似的にリレーションすることで参照データを型として定義することができます。そのほかに以下の機能があります。

  • SortOrder による値の任意の順番でのソート
  • IsActive による値のアクティブ/非アクティブ化
  • 基本クラスの拡張による追加のプロパティの提供

Code は主キーではありませんが一意である必要があります。

注意点として、データの性質上、参照データは書き込みの API を提供しません。その代わり Database および EntityFramework テンプレートの場合は RefData.yml を定義することで初期値を設定することができます。カスタムで API を作るこで書き込みを実装することができます。ただしデータはキャッシュされていますので更新した値がすぐに反映されない可能性があります。

テンプレートによりデータの格納方法も異なります。Database および EntityFramework テンプレートの場合は参照データの種類ごとにテーブルを作成する必要がありますが、Cosmos テンプレートの場合は RefData コンテナーにすべての種類の参照データが格納されます。

おわりに

参照データをマスター データと混同してしまうと扱いに困ることになりますので正しく理解する必要があります。便利な機能であることは間違いないので上手に使っていただければと思います。

Discussion