BT

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

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Programming Entity Framework: Code Firstに関するJulie Lerman氏のインタビュー

Programming Entity Framework: Code Firstに関するJulie Lerman氏のインタビュー

原文(投稿日:2011/12/22)へのリンク

先週、dotNetMontrealコミュニティが主催するセミナーでJulie Lerman氏によるEntity Frameworkコードファーストアプローチが行われた。コードファーストは、デザイナを使うことを強制することなく、コードと構成を使ってEntity Frameworkのモデルを説明する方法である。

Entity Frameworkは、開発者が概念アプリケーションモデルに対してプログラミングする代わりに、リレーショナルストレージスキーマに対して直接プログラミングすることで、データアクセスアプリケーションを作成することができる。Entity Frameworkは.NET Framework上に組まれており、バージョン4.2がオープンソースのVisual Studioパッケージ管理システムであるNuGetからのみダウンロードすることができる

InfoQは、O’Reillyから新しく出版されたRowan Miller氏と彼女の共著: Programming Entity Framework: Code FirstについてJulie氏と議論した。

InfoQ: 11月に出版されたあなたの新しい本、Programming Entity Framework: Code Firstについて教えてください。

Julie Lerman: これは実質、私の“ビッグブック”と呼ばれるProgramming Entity Framework 2nd Editionの拡張です。これは、多くのコーディングサンプルとともにEntity Frameworkのコアの深くを解説したおよそ900ページの本です。そのため、コードファーストとDbContextを追記しただけで本全体を書き直すのではなく、この新しい部分のみの短い本を書くことを共著者のRowan Miller氏と決めました。

この短い本のコンセプトは、O’Reillyで“リアルタイムブックス”と呼ばれる場所に位置付けられました。彼らのアイディアは、短い本をすぐにリリースすることです。なので私たちは、コードファーストの部分にのみフォーカスすることに決め、アプリケーションを書くことではなく、モデリングとの違いと、コードファーストでできるマッピングがどのようにデータベースを初期化するか踏み込みました。この本もまた192ページと大きく、ちょっとだけ大きすぎる“ビッグブック” です。

コードファーストは完結しており、DbContext API全体が書かれています。MicrosoftのEntity Frameworkチームのプログラムマネージャであり、コードファーストの開発をしているRowan Millerは、両方の本の共著者です。

私たちは現在、DbContextの本を書いており、私が書いたある章は先進的なものになります。この本は、技術レビューと編集を通じてDbContextの奥深くにまで踏み込んでおり、ほかの月にリリースされるべきです。

最後に私たちは、ソリューションに関する本を書いています。こちらは、コードファーストとMVCアプリでDbContextを使ったり、WCFデータサービスでこれを使ったパターンに関するものです。これはレシピ本ではなく、私たちのガイダンスとたくさんの例、そして私たちが推奨するプラクティスによるいくつかのソリューションになる予定です。

InfoQ: データベースファーストやモデルファーストのような他の開発スタイルを超えたコードファーストの最大の利点はなんですか?

Julie Lerman: コードファーストで最もすばらしいことのひとつは、特に(データベース)デザイナを使いたくない人たちが、コードだけでできることです。デザイナを使った場合、そこからクラスのコードを生成したいだけなのに、インプレースでモデルを維持する作業がツールに依存しています。そして、ロジックを追加するためには、パーシャルクラスを使う必要があります。このアプローチは、あなたが必要なクラスがデザイナから生成できるかに依存しています。つまりデザイナは、それを利用したい人たちにはすばらしいものですが、コードファーストはモデルを作成するのとは本質的に異なる方法です。

コードファーストは、たとえばすでにクラスがあり単にそれを使いたいときにはすばらしいものです。なぜなら、データベースへのクラスマッピングの上にあるFluent API構成レイヤだけで可能になるからです。または、なにか新しいことをはじめるとき、クラスを使うだけでそれを実現できます。

InfoQ: コードファーストアプローチの落とし穴はありますか?

Julie Lerman: 高いレベルで言うと、デザイナがモデルに対してサポートしていることで、コードファーストがまだできないことがいくつかあります。コードファーストにおける最大の問題のひとつは、モデルにストアドプロシージャをマッピングできないことです。Entity Frameworkは、マッピングなどをサポートしています。エンティティモデルXMLファイル(EDMX)では、エンティティに対して追加、更新、削除などのストアドプロシージャをマッピングすることができ、Entity Frameworkは、自分のコマンドを作らずそれらを使用します。

InfoQ: プレゼンテーションの中で、Fluent APIについて触れていましたが、開発者がコードファーストアプローチでこの機能を使う方法を教えてください。

Julie Lerman: みんなクラスの構成にデータアノテーションを使うことに慣れていると思います。コードファーストは、デフォルトのシナリオにおいてクラスとデータベースをどうやってマッピングするかを知っており、コードファースト規約は、開発者がそれを意味すると意識することがありません。クラスにそれを含めるだけなので、データアノテーションのサンプルをたくさん見ていることでしょう。マッピングを明示するデータアノテーションですが、データのバリデーションを明示する属性ではなく、実際にはFluent APIに依存しています。

基本的にFluent APIは、コードファーストでどうやってデータベースとクラスをマッピングするかについて、より多くの情報を提供するための構成を適用することができます。それをすることによって、直接クラスに適用するよりも、“流ちょうに(fluently)”これらの命令をコンテキストに構築しています。Fluent APIによって構成をコードに含めることによって、あなたのクラスは“クリーンクラス”を維持することができ、データレイヤに特定のコードをすべて含めることができます。

Fluent APIについて理解するその他の重要なことは、コードファーストのマッピング解釈の“修正”、コードファーストとEntity Frameworkサポートの拡張など、それがすべての構成を表すということですが、その一方でデータアノテーションはサブセットです。

InfoQ: コードファーストアプローチは、エンタープライズレベルのアプリケーションに使用できますか?

Julie Lerman: Entity Frameworkの最初のイテレーションでは、いくらかの人々は懐疑的だったと思いますが、最新版のEntity Framework 4.2では、コードファーストとDbContextを使ったアプリケーションでエンタープライズレベルのアーキテクチャを実現できます。

Visual Studio 2008と.Net 3.5 の一部であった最初のバージョンのEntity Framework 1.0は、“アジャイルスタイル” アーキテクチャ、ユニットテスト、リポジトリ、およびそのようなことを実際に行うのに制限があった。これは、Entity Frameworkがフレームワークの一部であるEntityObjectと呼ばれるクラスに強く依存しているためです。このイテレーションは、データベーステーブルとデータリーダーから移行した人たちにとって非常に優れていました。自動的に変更を追跡することができるデータベーブルを持つクラスという多くの人々に取って重要なものを失ったため、すべてではないが、多くの人が同意するでしょう。そこには多くの問題があり、彼らはまだそれを抱えています。

EF 4と呼ばれ.Net 4とVisual Studio 2010とともにリリースされた、Entity Frameworkの2番目のイテレーションは、POCO (Plain Old Clr Object)をサポートしました。現在、私たちはリポジトリを構築して、結合テストだけじゃなく、単体の動作と単体テストを行うことができます。これは、Entity Framework 4の上に乗っているコードファーストとDbContextはでより簡単になりました。彼らがアーキテクチャを実現する前にEntity Frameworkで必要だった追加作業を、自身のAPIに引き込んだため、より簡単になりました。

InfoQ: Windows AzureやSql Azureを使ったMicrosoftのクラウドプラットフォーム上にアプリケーションをデプロイするためにコードファーストはどのように使うことができますか?

Julie Lerman: たとえば、Sql Azureのデータベースを作成したいときに、コードファーストを使うことができます。あなたのコンピュータのVisual Studioで、Sql Azureデータベースを指したコードファーストを実行することができます。あなたが新しいデータベースを使った開発でしたいと思う、ドロップや作成といったすべての操作を行うことができます。これは、実際にうまく動作します。

Windows Azureでは、基本的に.NETでアプリケーションを書き、それをクラウドに乗せます。一般的に私はWindows Azureで、WCFデータサービスと同じようにEntity Frameworkを使用するWCFサービスのホストに使用しています。なので私は、Sql Azureを使ったWindows Azureでホストされているものと両方を持っています。ローカルアプリケーションで、Sql Azureデータベースを使っている場合、データベースの呼び出しに待ち時間が発生する。これは、遅延読み込みを使用している人たちにとって問題になる可能性があります。

クラウド上のWindows AzureとSql Azureの組み合わせにおいてEntity Frameworkは完全にサポートされています。

InfoQ: コードファーストとDbContextについて開発者が知るべきことはなんですか?

Julie Lerman: コードファースト、データベースファースト、モデルファーストなど、どうやってモデルを作成したかに関係なくDbContextを使用することができます。私が考えるコードファーストについて知っておくべきことは、Entity Frameworkのモデルを取得するためのもうひとつの方法だということです。現在、モデルを作成するための方法が3つあります。一度モデルを取得すると、それをどうやって作ったかに関係なく同じようにEntity Frameworkを使うことができます。

DbContextに戻すと、DbContextについて理解することが重要で、あなたが最初にするべきことです。Entity Frameworkを使って新しいこれから新しいアプリケーションをはじめるのであれば、DbContextを使うべきです。ObjectContextを使ったアプリケーションがあるのであれば、それを使用してください。それはまだそこにあります。これはコアAPIの一部ですが、Entity FrameworkチームはObjectContextのコアよりもアクセスしやすく作っているため、新しいアプリケーションをはじめるときはDbContextを使って下さい。

InfoQ: 最後に、あなたが本を書き終えた後の予定を教えて下さい。

Julie Lerman: 私はPluralsightのビデオに戻ることを非常に楽しみにしています。私は、これを見た人たちが非常に役になったと言ってくれるのが本当に楽しいです。私が本に関わっている間、彼らは大変なので、なるべく早く本を終えて戻ろうと考えています。また私は、MSDN Data Developers Centerで、コードファーストとDbContextの短いビデオと記事を提供しています。

Julie Lerman氏について


Julie Lermanは、Entity Frameworkの独立した権威であり、2006年の創業以来この技術を教育している。Julieは、高く評価されている"Programming Entity Framework (2010年8月に第二版がリリースされた)の著者である。彼女は、.NETコミュニティでMicrosoft MVP、ASPInsider、INETAスピーカーとしてよく知られている。 彼女は、多産のブロガーであり、TechEd、DevConnectionsを含む世界中の大小のカンファレンスで頻繁にプレゼンターをしており、MSDN Magazineのデータポイントのコラムを含むよく知られる技術記事を書いている。Julieはまた、MSDNとPluralsightでトレーニングビデオを作成している。

 Julieは、バーモントに住んでおり、2002年からVermont.NET User Groupを行い、Vermont Software Developers Allianceの設立役員であった。彼女のブログとTwittertwitter.com/julielermanを読むことができる。

この記事に星をつける

おすすめ度
スタイル

BT