2011-02-07 10 views
2

私はMVCの世界で始まったばかりですが、VS 2010に組み込まれている標準のMVCテンプレートを使用しました。私はいくつかのコントローラとビューを用意しており、今は自分のデータベースにアクセスする必要があります。TDDとMVCの交差点。 ORMはうまく統合されますか?

私は既にサードパーティの企業によって定義された、かなり大きい既存のSQL Server 2005データベースを持っています。私は、特定の会社のニーズに合わせてレポート/管理インターフェースを使っています。

私は最初、このDBからいくつかのテーブルのリストを取り出すことをお勧めします。だから... MVC 3を使用して、うまく統合するいくつかのORMツールは何ですか?

私はまた、テストドライブデザインアプローチを使用しようとしています。私はデータの挿入/更新/削除が必要なテストのために何をすべきか分からない。それが "モック"であるのですか?

+0

ORMの選択に役立つように(jfarが言ったように、どのORMもMVCで動作するはずです):http://stackoverflow.com/questions/1377236/nhibernate-entity-framework-active-records-or-linq2sql/ –

+0

Wowその質問に対するあなたの答えは素晴らしかったです。私にそれを指摘してくれてありがとう。私はこのトピックに関する50の近い質問を読んだが、まだそれには達していなかったと思う。ポインタありがとう。 –

答えて

4

すべてのORMはAsp.net MVCとうまく統合されています。 ORMの統合を難しくするasp.net mvcには何もありません。

あなたの最大のハードルは、従来のデータベースを使用しています。 NHibernateとEntity Framework 4は、レガシーデータベースへのマップをよく理解している唯一の2つのフリーORMです。 EF4は、レガシーデータベースへのマッピングにはそれほど悪くはありませんが、グリーンフィールド開発ではうまく機能します。対照的に、NHibernateはあなたが考えることができるほとんどのシナリオをマップすることができます。

テストの容易性は、どのデータアクセスパターンを使用するかによって大きく左右されます。リポジトリ・パターンは、テストするのがどれほどの親しみやすさから人気があります。嘲笑は必要ありません。

1

Castleコンポーネント(Windsor、Dynamic Proxy、Active Record)を使用することを強くお勧めします。 基本的にデータをモックすることができます。これは、Active Recordが手動で、またはDynamic Proxyのインターセプタを使用してそれを操作できるような属性を持つモデルを作成するためです。 リポジトリとデータサービスをまとめて、データアクセスをより詳細に制御します。
適用可能な場合はspecifition patternを使用すると、柔軟なクエリが容易にできます。
IEnumerable<T>または仕様(これは、NHibernateの抽象的な基準をラップしてDetachedCriteriaに変換することもあれば、DetachedCriteriaまたはHQLを含めることも、カプセル化しているものを含めることもできます)を渡すためには、 )をクエリとして使用します。
あなたは簡単にデータベースのアクセスを模擬し、より簡単にリファクタリングとテストを行うことができます。

+0

ActiveRecordは、Repositoryパターンのようなものよりもはるかに難しいです。あなたは "テストするのが簡単な"ことを言うことはできませんし、動的プロキシインタセプタについて話を始めることもできません。 Jeeze。 – jfar

+0

@ jar:私は強く同意します。アクティブレコードのデータを生成することは、NHibernateを直接使うよりはるかに簡単です。 –

+0

私は物理的またはメモリ内のテストについて話しています。物理的なテストでは、ORMで行う必要があるのは、新しいPerson(){FirstName = "test"}を作成して永続させることです。私たちが記憶の中で話しているのであれば、リポジトリで必要なのは同じことです。インターセプタへのフックは必要ありません。静的な言語テストでは、クラスが永続性に直接結びつけられるたびに、テストは難しくなります。これは単に事実であり、Repositoryなどのパターンが存在する理由です。 – jfar