BT

ORMと永続性非依存

| 作者: Roopesh Shenoy フォローする 0 人のフォロワー , 翻訳者 吉田 英人 フォローする 0 人のフォロワー 投稿日 2013年9月11日. 推定読書時間: 1 分 |

原文(投稿日:2013/08/29)へのリンク

Julie Lerman氏は先日,Entity Frameworkでprivateなコンストラクタとprivateなプロパティセッタを持つクラスの操作が可能なことを指摘した。

氏の公開したテストを見れば,Entity Framework(EF)ではprivateなセッタへのデータの設定や,privateコンストラクタの呼び出しが,さほど難しくないということが分かる。さらにEFがEntityProxyFactoryとその関連クラスを参照してこれを行っていることや,リフレクションとIL Emitの組み合わせが要点であることなども理解できるはずだ。NHibernateはさらに一歩進んで,privateなフィールドへのアクセスまでもサポートしている (EFでもすでに検討されている)。ただしどちらも,現時点ではデフォルトコンストラクタ(publicでなくてもよい)が必要だ。

一般的な方向性として,これは悪いことではない。氏も述べているように,永続性非依存(persistence ignorance)促進するものだからだ。

アーキテクチャ面では,Entiry FrameworkとNHibernateはどちらも永続性非依存を支援するパターンをサポートする –

それぞれに対して,Entity FrameworkにはDBSetDBContextがあり,NHibernateにはQueryOverAPIとSessionContextがある。ただしその一方で,遅延ローディングのサポートに関してはどちらも今のところ,この方針とは相反するVirtual Proxyパターン(プロパティをvirtualにする必要がある)を使用している。

永続性非依存は一般論としてよいプラクティスと見なされている。いわゆるActive Recordパターンを使った場合とは違い,ビジネスルールを永続化ロジックから分離することが可能だからだ。これによって設計全体がシンプルに,よりテストしやすいものになる。

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには 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