【ハウツー】
前編では、LightSpeedでモデルを作成してデータベースに反映させる方法を紹介しました。中編にあたる本編は、モデルから生成されたコードを利用して基本的な操作(追加、更新、参照、削除)を行う方法を紹介します。
まず、モデルから生成されたクラスを見てみましょう。生成されたクラスにはEntityとUnitOfWorkの2種類があります。
エンティティは、アイデンティティによって識別される一意のオブジェクトで、基本的にテーブルの1レコードが、1つのエンティティにマッピングされます。このエンティティに振る舞いを記述することで、ドメインモデルを構築していきます。
前回、デザイナーでDvdとRentalというエンティティを作成しましたが、これらはEntityという基本クラスを継承します。このEntityクラスには、ステータス(EntityState)、エラー情報(Error/Errors)、妥当性チェック(OnValidate)、保存イベント(Saving)といった多くのメンバが実装されています。
エンティティは、ビジネス上の概念を表現する役割を担っており、UIやインフラストラクチャの実装に依存しません(Entityクラスが.NET Framework標準のIEditableObject、INotifyPropertyChanged、IDataErrorInfoといったインタフェースだけを継承しているのもそのためです)。
ドメインモデルでは、エンティティ自身が永続化の仕組みを持たないため、エンティティの生成や永続化の仕組みを別途考慮する必要があります。LightSpeedでは、この仕組みとしてUnitOfWorkというクラスを用意しています。
UnitOfWorkでは、オブジェクトに対して行った変更を記録して、最終的な結果をデータベースに反映させることができます。また、LightSpeedのUnitOfWorkクラスは、ファクトリ(オブジェクトの生成処理)とリポジトリ(オブジェクトの集合をメモリ内で管理)の役割も果たします。
クラス図を見ているだけではイメージがわきにくいと思いますので、ここからはプログラミングしながら、エンティティとUnitOfWorkについて理解していきましょう。
| トマトを食べれば痩せられる!? -京大ら、新発見の成分で肥満改善効果を実証 [21:00 2/10] |
| JAXA、液体シリコン中に残存する共有結合を観察 -大口径ウェハの実現に期待 [20:11 2/10] |
| NEDOなど、熱膨張が小さな樹脂複合材料ペレットの量産化に成功 [19:22 2/10] |
| 理研、一般顕微鏡を蛍光顕微鏡に強化できるアダプタを試作して性能を実証 [19:15 2/10] |
| 天の川のブラックホールが小惑星を飲み込んでいる - NASAが発表 [18:08 2/10] |
|
【連載】鉄道トリビア 第137回 山手線と京浜東北線から●●●が消えた!? [08:00 2/11] ライフ |
|
JRグループ、「周遊きっぷ」を見直し - 19の周遊ゾーンが3/31で販売終了に [07:30 2/11] ライフ |
|
「青春18きっぷ」春季用は2/20発売 - 夏季用・冬季用の発売は現時点で未定 [07:30 2/11] ライフ |
|
【ハウツー】炊飯器でつくるチャーシューが簡単すぎ、しかもおいしい! [07:00 2/11] ライフ |
|
【連載】出社前に。日常生活ですぐに使える! 英語クイズ 第118回 「どうぞお話しください、あなたが話す番です」ってなんて言う? [07:00 2/11] ライフ |