2009-06-01 8 views
0

ASP.NET MVCモデルを定義する場所をカバーするベストプラクティスはありますか?ASP.NET MVCモデルの場所に関するベストプラクティス

新しいASP.NET MVCプロジェクトは、彼らが中に行くための素晴らしいきちんとしたモデルのフォルダを持っていますが、本番環境では、それらは他の場所から来ることができます。

  • サードパーティのクラスライブラリ
  • WCFサービス

強く型付けされたビューでは、そのような場所に定義されたクラスを使用することはできますか?

答えて

6

私がASP.NET MVCのモデルで作業したほとんどのプロジェクトでは、従来のモデルの意味よりも多くのビューモデルがあります。私は、View Modelのデータアクセスで使用するのと同じモデルを使用できるプロジェクトをまだ持っていません。ほとんどのページに表示する必要がある情報が多すぎます。そのため、モデルフォルダにモデルを保存するか、他のすべてのMVC固有のクラスを持つ別のライブラリに格納します。

+1

この目的のために、私は多くの場合、ビューデータクラスを持つことになります。コントローラーは、さまざまな型の適切なモデルを取得し、作成したビューを合成してビューデータクラスにし、強く型付けされたビューに渡します。 –

+0

データモデルクラスを継承したり、初期化したりする新しいビューモデルクラスを完全に定義するのか、または部分クラスを使用しますか? –

+0

マイ・ビュー・モデルは、一般に、データ・モデルをプロパティーなどとしてビュー・モデルで使用する完全に新しいクラスです。 –

0

私が見つけた1つの問題は、モデルがWebプロジェクトで定義されていない限り、マークアップで指定された強く型付けされたビューを使用しているときにVisualStudioがモデルを見つけられないようです。私のモデルは通常別のプロジェクトで定義されています。強く型付けされたビューを使用するには、強く型付けされたViewPageから派生したクラスを持つようにコードビハインドを作成する必要があります。次に、マークアップを変更して、このクラスに関連付けます。

+0

後、私はそれらの問題のいずれかを持っていなかったディレクティブ

<%@ import namespace='your.namespace.here' %> 

を使用してください。あなたのWebアプリケーションからプロジェクトを正しく参照して、それらが同じルート名前空間を持っているか(または他の名前空間を正しく参照している)ことを確認しますか? –

+0

もう一度チェックしますが、他のプロジェクトは参照されていますが、同じルート名前空間を持っていません。 – tvanfosson

2

WCFサービスにモデルを入れることによって、正確に何を意味するのか分かりません。必要なモデルオブジェクトを公開するWCFサービスを使用することを意味する場合、それは機能します。

あなたのモデル、ビュー、コントローラを保持する別のクラスライブラリについては、これはかなり一般的なアプローチであり、かなりうまくいくと思います。実際には、アプリケーションのサイズと複雑さが増すと、これは本当に必要条件だと私は考えています。これは、MVCアプリケーション内の異なる論理コンポーネントの物理的な分離の一種です。

+0

はい、モデルオブジェクトがWCFサービスを介して公開されていることを意味します。 –

+1

@リチャードE:この場合、プロジェクトへのサービス参照を追加すると、アセンブリ内でモデルクラスが自動的に生成されるため、問題は「サードパーティのクラスライブラリかどうか」の問題になります。 –

0

名前空間をビューページにインポートする必要があります。これはではなく、はコードビハインドページが必要です。

はすぐ<@ Page.....ディレクティブ

関連する問題