振る舞いの追加

ここまで、エンティティの操作と取得方法を中心に紹介してきました。ここからは、エンティティに振る舞いを追加する例を紹介します。といってもLightSpeedにはエンティティの振る舞いに関する機能は特に用意されていませんので、通常のVisual Studioの機能で振る舞いを追加していきます。

追加する内容

ここでは、レンタル総額を計算するメソッドをRentalエンティティに追加します。また、区分に応じて金額を計算するメソッド(新作は1泊200円、旧作と子供向けは1泊100円)と区分名を表示するプロパティをDvdエンティティに追加します。

派生エンティティの追加

まず、モデルデザイナーを開いて、Dvdの派生エンティティであるChildDvd(子供向けDVD)とNewDvd(新作DVD)を作成します。LightSpeedは単一テーブル継承(SingleTableInheritance)に対応しているので、DvdエンティティのTypeの値に応じて、派生エンティティが設定されるように設定します。ここでは、Typeの値が1の場合はNewDvdに、Typeの値が2の場合はChildDvdにマッピングされるように設定しています。

Dvdの派生エンティティを追加(ChildDvdの継承設定)

パーシャルクラスの追加

モデルを変更する度にLs.csは再生成されてしまうので、独自の振る舞いを記述するためのパーシャルクラスを作成します。ここでは、Partialというフォルダの中に、4クラス(Rental.cs、Dvd.cs、ChildDvd.cs、NewDvd.cs)を作成します。

クラスダイアグラムの設定

ここまで、モデル駆動で作業していますので、引き続きモデルを使って作業していきたいと思います。そのために、Ls.Domainプロジェクトを右クリックして[クラスダイアグラムで表示]を選択します。ClassDiagram1.cdというクラス図が生成されるので、必要なクラスを残して見やすいにように整形します。

クラスダイアグラムの設定

[新しいメンバの場所]プロパティで、先ほど作成したパーシャルクラスを選択しておくと、クラスダイアグラムから新しいコードを追加しやすくなるでしょう。

パーシャルクラスに振る舞いを追加

そしてパーシャルクラスに料金を計算するロジックを記述します。

パーシャルクラスに料金計算用のコードを追加

ここでは、Rentalクラスに料金総額を計算するCalcAllメソッドを追加しました。そしてDvdクラスには料金を計算するCalcメソッドと区分名称を返すTypeNameプロパティを追加しました。NewDvdクラスとChildDvdクラスは、これらをオーバーライドしています。最終的なクラスダイアグラムは次のようになります。

パーシャルクラスに追加したメソッドとプロパティがダイアグラムに表示されている