BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース ORMと永続性非依存

ORMと永続性非依存

原文(投稿日: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パターンを使った場合とは違い,ビジネスルールを永続化ロジックから分離することが可能だからだ。これによって設計全体がシンプルに,よりテストしやすいものになる。

この記事に星をつける

おすすめ度
スタイル

BT