2010-12-18 11 views
2

私は "検証モデル"をどこに配置するかを決定しようとしています。ASP.NET MVC - 検証ロジック - 配置する場所

私の構造は、現時点では次のとおりです。

ウェブ(ビジネスとオブジェクトへの参照を持っている)

  • コントローラ

  • ビュー

  • CSS

  • スクリプト

ビジネス(データとオブジェクトへの参照を持っている)

  • サービス

データが(オブジェクトへの参照を持っている)

  • リポジトリとEFコンテキスト(コードファースト)

オブジェクト(EF用)

  • POCOS

今すぐログインモデルのような検証物事を置くために私の質問はありますか?モデルをWebレイヤーまたはObjectsレイヤーに配置する必要がありますか? - または私はそのような検証モデルを格納する必要がありますか?

ありがとうございます!

答えて

3

モデルはビジネスレイヤーに配置する必要があります。ビューモデルは、ビューに結び付けられているため、Webレイヤーに配置する必要があります。モデルとビューモデルの間のマッピングが必要です(この作業を容易にするために、AutoMapperのようなツールを使用することができます)。ビューはコントローラからビューモデルを受け取ります。これらのビューモデルに対して検証が実行されます。だから、

ウェブ

  • コントローラ
  • ビュー
  • モデル(ここでは、あなたのビューモデルを置くこと)
  • CSS
  • スクリプト
+0

私はLogInモデルを持っている - 私は "LogInModel"という名前のビジネスにモデルを置く必要があります。これは検証属性が一切ありません。Webレイヤーで、検証ルールを適用する "ViewModel"を作成しますLogInModelに? – ebb

+1

@ebb、あなたはそれを正しく得ました。 –

0

妥当性検査が必要なものはすべて、ビジネスレイヤーに入れる必要があります。検証はビジネス上の懸案事項であり、レイヤー間に分散してはならず、特定のアプリケーションタイプ(Web、Windows、サービスなど)に縛られるべきではありません。

ドメインモデルをアプリケーションに公開すると、エンティティを検証属性で飾ることもできますが、ドメインモデルが変更されるとアプリケーションが壊れることに注意してください。

Loginメソッドを持つビジネスレイヤーにAccountServiceクラスがあるとします。 LoginLoginInputクラスを受け入れ、LoginResultクラスを返します。

public class LoginInput { 

    [Required] 
    public string Username { get; set; } 

    [Required] 
    public string Password { get; set; } 
} 

public class LoginResult { 
    public bool Success { get; internal set; } 
    public string Error { get; internal set; } 
} 

これらのクラスの両方がのviewmodelsとして使用することができますので、あなたは、Web層内の任意のビューモデルを作成する必要はありません、とあなたは確かに置くべきではありません検証ロジックが含まれています。

関連する問題