Welcome to MSDN Blogs Sign in | Join | Help

こだかたろうです

マイクロソフトでデベロッパーエバンジェリストをやっています。 未だ修行中の身であります。

News

セッションフォロー(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を用いてデモを行っています。

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

Posted: Tuesday, September 29, 2009 8:55 AM by Taro Kodaka

Comments

No Comments

Leave a Comment

(required) 

(required) 

(optional)

(required) 

  
Enter Code Here: Required

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Page view tracker