セッションフォロー(TechEd T2-405 Part4 & 9/18 TechFildersセミナー)


すみません御報告が遅くなりました。TechEdと先日のTechFildersセミナー(9/18)のフォローです。


TechEdでは、Visual Studio 2010が不慮の事故で落ちてしまい中途半端になってしまった箇所です。


9/18では時間が足りなく、「続きはブログで」と言ったら、アンケートでお叱りを受けましたので、次回からはセッションに絶対納めるようにします、申し訳ありませんでした。


シナリオ.~ 汎用性を考慮するには?  ~


この方向性としては、Persistence Ignorance をシステムアーキテクチャとして取り入れてみることを考えてみたいと思います。


Persistence Ignorance とはデータの永続化に対して、特定のテクノロジーやプロダクトに依存しないことをさしています。


詳細はこちらから
http://msdn.microsoft.com/ja-jp/library/dd456853(VS.100).aspx


井上のブログでも紹介しています
http://blogs.msdn.com/daisukei/archive/2009/06/02/visual-studio-2010-ef4-poco-part1.aspx


Persistence Ignoranceの想定される使用シナリオとして代表的なものは、以下のスライドにある記述などがあげられます。
例えば、システム設計として、ModelFirstで考える場合、当然生成物は一般的なクラス(図)になるでしょうから、PIシナリオが適していると言えます。

しかし、ModelFirstは手段であり目的ではありません。なぜModelFirstを行うか?になると別の話題になってきますので、今回は、まず身近な目的で考えて見ましょう、例えばEFでサポートされないデータストアの使用を、将来的に実装したいなどが考えられるのではないでしょうか?


image


と言うことで、セッションでは、ストアとしてXMLとMS-AccessのMDBファイルを使用して、PIシナリオとして、これらを切り替えてみました。(TechEdでは、その最中にVSが落ちたわけですが・・・)


PIを実現するためには、エンティティが特定のプロダクトやテクノロジーに依存しないことが条件になります。しかし、現状のADO.NET EntityFrameworkでは、エンティティの実装(EDM)として、どうしても特定インタフェースを継承しなければなりません。


 


この話はよくしますが、確認方法としては、前々回でもご紹介した以下のツールを使用して、手動でEFを使用した環境を構築します。


EDM ジェネレータ (EdmGen.exe)
http://msdn.microsoft.com/ja-jp/library/bb387165.aspx


具体例は以下が分かりやすいかと思います。
Entity Framework プロジェクトを手動で構成する方法
http://msdn.microsoft.com/ja-jp/library/bb738546.aspx


ここで作成した、CSDL、SSDL、MSL、CS(VB)のコードを用いて環境を作成します。(下図)


image


さて、上記のCS(VB)のコードファイルをダイエットしていくと、最終的に以下のようなコードと向き合うことになります。(例はNorthwindデータベースのProductsエンティティです)






[EdmEntityTypeAttribute(NamespaceName = "NorthwindModel", Name = "Products")]
   public partial class Products : IEntityWithChangeTracker ,IEntityWithKey , IEntityWithRelationships
   {


       [EdmScalarPropertyAttribute(EntityKeyProperty = true, IsNullable = false)]
       public int ProductID { get; set; }


       [EdmScalarPropertyAttribute()]
       public string ProductName { get; set; }


       [EdmScalarPropertyAttribute()]
       public System.Nullable<int> SupplierID { get; set; }


~後略


現バージョンのEFのエンティティとして使用するためには、上記のコードにある、IEntityWithChangeTracker ,IEntityWithKey , IEntityWithRelationships あたりが必要になってくると言うわけです。(エンティティに実装する機能によって必要なインタフェースが変わります)


そこで、こうした記述を排除する方向でPOCO(Plain Old CLR Objects)でのクラスを実装することがPIでは必要になります。


上述した井上のサイトでも、EFの次バージョンを使用したPOCOクラスの実装を紹介していますが、小高は、以前ご紹介したEFのCTPを用いてデモを行っています。


ちょっと長くなってきました(前回が長すぎました・・・)ので、次回の記事でデモを簡単にご紹介したいと思います。

Skip to main content