2009-06-05 6 views
1

私はMVCフレームワークを初めて使い、NerdDinnerサンプルプロジェクトを実行しました。私はフォームベースのasp.netを介してこのアプローチが大好きです。大きなプロジェクトの基本テンプレートとしてNerdDinnerサンプルプロジェクトを使用できますか?

私はこの同じアプローチを使用して、より大きな側面のプロジェクトに取り掛かりたいと思います。このプロジェクトで、基本的な構造をより複雑なウェブサイトに拡大することを妨げるものは何かを見ていますか?私は警戒作るものの

例: 1)NerdDinnerサンプルは2つだけのテーブルのDBにアクセスし、私のデシベルは約30 2を持っている)NerdDinnerプロジェクトは直接LinqToSQLクラスを使用しています...からのすべての方法をコントローラーを介してモデルをビューに...より大きなプロジェクトのためのコーシャーですか?

NerdDinnerフレームワークの他の部分が将来の悲しみの原因になることはありますか?

答えて

1

リポジトリとコントローラの間にサービスレイヤを追加します。サービスレイヤには、主にコントローラがフォーム入力とページフローの処理を処理するビジネスロジックがすべて含まれます。

リポジトリ内では、LinqToSqlのクラスとフィールドをドメインモデルにマップし、サービスレイヤ、コントローラ、ビュー内のドメインモデルを使用します。大規模なシステムの場合、余分なレイヤーは長期的にはその価値が証明されます。

+0

ドメインモデルから/ドメインモデルへの変換は、そのようなオーバーヘッドではなくLinqToSqlクラスに変換されていますが、もっと多くのコードを書くことになりますか? – David

+0

@Davidはいマッピングレイヤーをサポートするためにはもっと多くのコードが必要です。そうしなければ利益がない限り、私はそれを提案しません。もう一つの選択肢は、nHibernateを使うことですが、私のチームはその準備ができていませんでした(急な学習曲線)。しかし、私たちのプロジェクトでは、作成するのが簡単だった余分なマッピングレイヤーが、私たちのデザインで3〜4の境界のあるコンテキストで終わったときにそれを支払っていました。 –

1

LinqからSQLのクラスについては、インターネットに関する議論がたくさんあります。いくつかのクラスは、クラスを直接使うときには抽象化が不十分だと感じています。仕事で私たちはサイトを改革し始めました。私たちはMVCを使用しています。基本的には、LINQ to SQLクラスのそれぞれがインターフェイスを実装していました。 IE:

public partial class LinqToSqlClass //generated class 
{ 
    public int Id{get;set;} 
} 

interface ILinqToSqlClass 
{ 
    int Id{get;set;} 
} 

public partial class LinqToSqlClass : ILinqToSqlClass 
{ 

} 

これはほんの一部です。次に、これらの生成されたクラスのいずれかを取得するリポジトリがありますが、そのインタフェースタイプのクラスとしてのみ取得されます。この方法では、実際にLinqからSQLクラスまで直接作業することはありません。これを行うには多くのさまざまな方法がありますが、大規模なデータベース(特にスキーマが変更される可能性がある場合)を扱う場合や、複数のソースから来る可能性のあるデータを扱う場合は、間違いなくクラスを直接使用しないでください。

ボトムラインは、その大雑把な夕食の章に良い情報がたくさんありますが、あなた自身のプロジェクトを作成するときには、明らかにあなた自身の問題にぶつかります。

0

Nerd Dinnerのテキストは、MVCフレームワークが他の一般的なデータ抽象化にも同様に十分に対応できるという主張をしています。 (それは事実です)あなたの組織はすでに好きな組織を持っているようです。良い学習戦略は、おそらく一方を他方に適応させることでしょう。

2

私はモデルがlinq2sqlを使用する唯一の場所でなければならないことに同意します。小さなプロジェクトのモデルではlinq2sqlのみを使用しています。大規模なサイトでは、データベースとのやりとりをすべて行い、モデル内でWebサービスを利用する個別のWebサービスプロジェクトを作成するのにオーバーヘッドの価値があります。

Nerd Dinerの例を完全にチェックアウトしたことはありませんが、他のベストプラクティスには、型付きビューと簡単な検証が可能なデータモデラーを使用しています(xvalまたはモデルバインダーDataAnnotationsを参照)。私には、最も重要なベストプラクティスの2つがあります/

スティーブンウォルターは、websiteに、新しいMVCプロジェクトを設定するときにチェックアウトして考慮する価値のある優れたヒントをたくさん持っています。

+0

FYI:xValは、Webクライアントサイドのものを支援するように設計されており、サーバー側のドメインモデルの検証には役立たないように設計されています。 –

+0

実際には、Modelstateのクライアント側とサーバー側の両方の検証に役立つように設計されています(http://blog.codeville.net/2009/01/10/xval-a-validation-framework-for-aspnet-mvc/を参照)。 DataAnnotationsのCustomValidation属性を使用してビジネスルールを作成することができますが、ビジネスルールの検証ではなく、データの検証に関することです。 –

関連する問題