ドメインモデルの定義

Objective

After completing this lesson, you will be able to core Data Services を使用した基本ドメインモデルのキャプチャ

CDS モデルの基本原則

Core Data Services の役割

Core Data Services (CDS) は、CAP の基本コンセプトです。データモデルおよびサービスモデルを宣言的に取得する手段を提供します。

モデルベースのアプローチを理解するには、ビデオを視聴してください。

このレッスンでは、ドメインモデルに焦点を当てます。サービスモデルについては、次のレッスンで説明します。

モデルの性質

CDS モデルはコアスキーマ表記 (CSN) で表されます。CSN ("シーズン" のように発音) は JSON スキーマに似ていますが、JSON の機能を超えて、完全なエンティティ関係モデルおよび拡張をキャプチャします。

CDS モデルのソースおよびターゲット書式の概要を把握するためのビデオを視聴してください。

この学習では、.cds ファイルでモデルを定義します。

ドメインエンティティ

前述のとおり、ここでは CDL を使用してドメインモデルを作成する方法を見ていきましょう。これを行うには、CAP プロジェクトの db フォルダに拡張子 .cds のファイルを作成します。ファイル名は任意で、一般的なファイル名は schema.cds などです。

最初に、Authors という単一のドメインエンティティをファイルで指定します (図 A Simple Domain Entity を参照)。

ドメインエンティティは、通常の CRUD 操作を使用して読込および操作できるデータセットを表す名称およびデータ型が指定されたエレメントを持つ構造化データ型です。永続モデルに変換されると、エンティティはテーブルになります。

ヒント

命名規則: エンティティ名を大文字にすることをお奨めします。エンティティ名には複数形も使用します (例:作成者)。エレメントは小文字で開始します (例: 名称)。

エレメントを入力するために、CDS には小さな組込データ型のセットが付属しています。組込データ型の一覧は、CDS 文書にあります。

図で使用されている構文 entity Authors は、define entity Authors と同じです。つまり、キーワード define はオプションです。

キーワード key を使用して、エンティティの一次キーを形成する 1 つ以上のエレメントを指定します。

ヒント

単一項目のみで構成される単純な技術一次キーを優先します。この単一キー項目の名称として ID を使用し、それを組込データ型 UUID で入力します。タイプ UUID の一次キーエレメントは、INSERT 時に自動的に入力されます。

名称領域

ファイル内の関連するすべての名称に自動的に適用される名称領域を定義することができます。この例では、エンティティ名 Authors に名前空間 com.sap.learning が接頭辞として付けられ、com.sap.learning.Authors が完全なエンティティ名になります。名称領域は単なる接頭辞であり、それ以外には特別なことはありません。名称領域はオプションです。モデルを他のプロジェクトで再利用できる場合はそれらを使用します。それ以外の場合は、モデルなしで行うことができます。

ヒント

リバースドメイン名アプローチは、名称領域の選択に適しています。

ユーザ定義タイプ

エンティティ定義でエレメントのカスタムタイプを宣言できます。カスタムデータ型は、組込型、構造化データ型、またはアソシエーションのいずれかから派生した単純データ型にすることができます。ここでは、単純なデータ型と構造化データ型を取り上げます。アソシエーションについては、Learning Journey の後半で説明します。

単純データ型

図 "単純データ型の例" では、NoOfBooks という単純データ型が定義されています。これは、組込データ型 Integer に基づいています。つまり、NoOfBooks が使用される場所はすべて、基本的に Integer 値を表します。

示されている Books エンティティには、タイプ NoOfBooks で型指定された株式要素があります。つまり、このエレメントのデータ型は本質的に Integer です。

定義

Code Snippet
1
type NoOfBooks : Integer;
図で使用されるは、以下と同等です。
Code Snippet
1
define type NoOfBooks : Integer;
つまり、キーワード define はオプションです。

注記

カスタムタイプを使用すると、モデルのセマンティック表現力を高めることができます。ただし、このようなタイプの過剰な使用は避けてください。これらは、適切なレベルの再利用がある場合に役立ちます。再利用を行わないと、関連するデータ型定義を常に検索する必要があるため、モデルの読込と理解が難しくなります。

構造化データ型

構造化データ型は、1 つのタイプの下にある 1 つ以上の関連エレメントを組み合わせたカスタムデータ型です。これにより、複雑なデータ構造を作成し、それらをエンティティ内で使用することができます。

図 "構造化データ型の例" に示すブックエンティティには、タイプ Priceの価格要素 (個別に定義された構造化データ型) があります。

Price タイプには、組込タイプ Decimal の金額と組込タイプ Stringの通貨 (最大長 3 文字) の 2 つのエレメントがあります。

ヒント

命名規則: タイプ名はエンティティ名と同様に大文字にすることをお奨めします。ただし、エンティティ名とは異なり、型名には単数形を使用します (例:価格)。 

列挙

列挙 (略して enum) を使用すると、コードを読みやすくし、分かりやすくすることができます。これは、アプリケーションロジックで不可解な値をシンボルに置き換えることができるためです。

型の列挙値は、対応する値が割り当てられた記号のセミコロン区切りリストとして指定できます。文字列型の場合、実際の値の割り当ては任意です。省略した場合、実際の値は記号に対応する文字列になります。

図 " Enums の例 " の Books エンティティには、タイプ Genreジャンルと呼ばれるエレメントがあります。これは、列挙値を含むカスタムデータ型です。

Genre 型は、組み込みの Integer 型に基づいています。つまり、列挙の各記号は Integer 値に対応します。

Genre 列挙には、2 つの記号 Integer( 値 1 に対応するフィクション、および Integer 値 2 に対応するノンフィクションの記号) が含まれています。

モデルのコンパイル

DDL ファイルの生成

ターミナルで cds watch を実行してサーバを起動すると、プロジェクトの db フォルダで定義されているドメインモデルが自動的にパーシスタンスモデルに変換され、設定されたデータベースにデプロイされます。つまり、対応する SQL DDL 文が生成され、CDS モデルに基づいて実行されます。

端末で以下のコマンドを使用して、これらの SQL DDL 文をマニュアルで生成することもできます。

Code Snippet
1
cds compile <models> [<options>]
このコマンドの詳細な説明を取得するには、以下のコマンドを実行します。
Code Snippet
1
cds compile ?
ターミナルです。

CAP プロジェクトの db フォルダの schema.cds という名前のファイルに含まれているドメインモデルの SQL DDL スクリプトを生成するには、プロジェクトのルートディレクトリで次のコマンドを実行します。

Code Snippet
1
cds compile db/schema.cds --to sql

図 "コンパイル済 CDS モデル" の SQL DDL スクリプトがこの方法で生成されました。

ヒント

ターミナルで上記のコマンドを入力する代わりに、 .cds ファイルのコンテキストメニューでエントリ CDS PreviewPreview as sql を選択することもできます。これにより、コマンドラインコマンドと同じ出力が生成されます。

ビデオを視聴して、生成された SQL DDL 出力に適用されるルールについて理解します。

その後、射影されたエンティティがビューとして生成されていることがわかります。また、エンティティ間で定義できる特定のアソシエーションを反映するために、生成されたデータベーステーブルに外部キー項目が自動的に登録されることを確認します。

デモおよび演習:ドメインモデルのキャプチャ

注記

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

シミュレーションからのソースコードは、以下の GitHub リポジトリのブランチ main および 2_domain_model にあります。

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

メインブランチにはデモ用の初期テンプレートが用意されていますが、2_domain_model ブランチにはシミュレーションで登録されたソースも含まれています。

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

ドメインモデルのキャプチャ方法については、ビデオを視聴してください。