BT

コンテキスト境界を使って大きなドメインモデルを小さくする

| 作者: Jan Stenberg フォローする 34 人のフォロワー , 翻訳者 徳武 聡 フォローする 0 人のフォロワー 投稿日 2013年3月4日. 推定読書時間: 2 分 |

原文(投稿日:2013/02/26)へのリンク

 

開発者はドメイン駆動設計(DDD)のコンテキスト境界という概念を使って、巨大なモデルを複数の小さなモデルに分割できる。MSDN MagazineのJulie Lerman氏の記事によれば、このときにEntity Frameworkのデータベースコンテキスト(DbContextクラス)が利用できる。

ひとつのコンテキスト内で多くのクラスから構成される単一のモデルを使うのではなく、複数のモデルに分割するのは役に立つ、と氏は言う。氏は2003年よりMicrosoft MVPを受賞しており、.NETプラットフォームのコンサルタント、メンターとして活躍している。コンテキスト境界の概念を導入すれば、より小さくて凝集度の高いモデルが作成できる。氏の記事はこの考えに基づいているが、DDDのコンテキスト境界はDbContextクラスを使うことよりも広範囲の概念であることも指摘している。それゆえ、氏は自身の実装がDbContextに“はまっている”、や“特化している”と表現している。
 
顧客サポートのクラスを注文や発送のクラスと分離し、別々のDbContextクラスに置くことで、氏はアプリケーションのすべてのクラスを含む大きなコンテキストを小さくよりフォーカスが絞り込まれたコンテキストに分割する。基底にある大規模なデータモデルとデータベーステーブルは元のままだ。
 
クラスにコンテキストに必要ない属性がある場合、元のクラスの一部分と一部のデータベーステーブルをカバーする小さくてより絞り込まれたクラスを作れる。これはデータベースのビューを使って実現できる。これらのクラスの制約は、クラスが制御していない、nullを許容しない列がある場合、インサートできないことだ。DbContextは例外を発生させる。
 
テーブルの自動作成を使ったデータベースのセットアップ、“コードファースト”には、“上部モデル”とすべてのクラスを含むDbContextに追加の作業が必要だ。出来上がったコンテキストはデータベースを初期化するのに使う。
 
DDD本の著者であるEric Evans氏氏はこの記事に積極的にツイートしたが、このような方法でコンテキスト境界を適用することに懸念を示す人もおり、他の方法を提案している。DDDコミュニティの定義から外れた使い方だという指摘がされた。

“明示的にコンテキストを定義しモデルに適用する。チームやアプリケーションの特定の部分の使い方、コードベースやデータベーススキーマなどの物理的な条件を考慮して明確に境界を設定する。モデルがこの境界内で厳密な一貫性を持つようにし、外部の問題で混乱しないようにする。”
 
Entity FrameworkはMicrosoftの.NETプラットフォーム向けのオブジェクトリレーショナルマッパーだ。

 

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT