非正規化ビューの公開

Objective

After completing this lesson, you will be able to 非正規化ビューを使用して、特定の使用ケースに合わせて調整されたサービスを定義します。

パス式

これまでのシナリオで実装された AdminService により、基礎となるデータモデルが 1:1 で公開されます。このようなサービスはかなりまれです。代わりに、サービスでは、特定の使用ケースに合わせて調整された非正規化ビューが公開されることがよくあります。以下の例を見てみましょう。

書店アプリケーションで使用するために、ドメインモデルの本と著者を公開する CatalogService をモデル化します。つまり、このサービスは、カタログユーザが書籍とその著者にアクセスし、注文できるようにすることを目的としています。

現在作成している新しいサービスは、CAP プロジェクトの srv フォルダにも定義されています。これには、cat-service.cds ファイルを使用します (以下の図を参照)。

最初に、AdminService の場合とまったく同じ方法で処理を行います。ファイル db/schema.cds から名称領域接頭辞 com.sap.learning のすべての定義をインポートし、インポートされた定義に対してローカルエイリアス db を設定します (1 行目)。

3 行目から 31 行目には、公開されたエンティティのコレクションとして CatalogService と呼ばれるサービスインターフェイスを定義する service ブロックが含まれます。@path アノテーションは、サービスにアクセスするための URL パス /cat を指定するために使用されます。

CatalogService では、基礎となるドメインモデルからのエンティティで射影として定義された 2 つのエンティティが公開されます。行 5ff は Books というエンティティを宣言します。これは、インポートされたドメインモデルで定義された Books エンティティのビューです。したがって、Authors エンティティは 18ff 行目で、ドメインモデルの Authors エンティティに対する射影として宣言されます。

CatalogServiceAuthors エンティティについては、後で詳しく説明します。まず、ブックエンティティについて詳しく見ていきましょう。

基礎となるドメインエンティティを 1:1 で公開する AdminServiceBooks エンティティとは対照的に、CatalogServiceBooks エンティティは明示的な select 句を使用します。つまり、select 句に明示的にリストされているもののみが公開されます。

いわゆるパス式を select 句で使用して、アソシエーションまたは構造化エレメント (もしくはその両方) に沿ってナビゲートすることができます。

この例では、Books モデルエンティティの author アソシエーションを使用して作成者名にアクセスします。このアソシエーションは、select 句にライタとして含まれています。

また、publicCountryBooks モデルエンティティで定義されたアソシエーションです。これは、Books エンティティを sap.common.Countries コード一覧に関連付けるために使用されます。この例では、このコード一覧の国名がpublicCountry として select 句に含まれています。

ブックドメインエンティティの価格要素には、構造化データ型があります。このタイプの 2 つのコンポーネントの金額と通貨も、対応するパス式を介して select 句に含まれます。

スマートセレクタおよび除外句

次に、CatalogService で公開される 2 番目のエンティティを見てみましょう。CatalogServiceAuthors エンティティは、インポートされたドメインモデルからの Authors エンティティに対する射影です。 

除外句を select 句の smart * selector と組み合わせて使用すると、除外リストに記載されているものを除く Authors ドメインエンティティのすべての要素が射影に含まれます。

Authors モデルエンティティにはAuthors エンティティが Epochs コード一覧に関連するエポックアソシエーションがあります。このコード一覧のエポック名は、パス式を使用して period という名称の追加エレメントとして射影に含まれます。

デモおよび演習:非正規化ビューに基づくサービスの定義

注記

演習問題として、SAP Business Application Studio で、以下のデモのステップバイステップの手順を実行します。

演習の開始点として、前の演習問題 "オプティミスティック同時制御の追加" の結果が正常に完了した場合はそれを使用します。または、以下の GitHub リポジトリのブランチ 9_concurrency_control を開始点として使用することもできます。

https://github.com/SAP-samples/cap-development-learning-journey

シミュレーションの完全な実装は、GitHub リポジトリの 10_denormalized_views ブランチにあります。

リポジトリのコンテンツとその使用方法の詳細については、ここを参照してください。

非正規化ビューに基づいてサービスを定義する方法については、ビデオを視聴してください。