2012-04-17 5 views
2

リポジトリでmvcを使用する場合、モデルを検証する最も良い方法は何ですか? 例を探していますが、私が必要としているものはまったく見つかりませんでした。リポジトリの検証

私は5つのプロパティを持つモデルを想定しています。それらのうち3つはデータアノテーションを使用しています。挿入する前にデータベースにチェックインする必要のあるバリデーションがいくつかあります。

有効であるかどうかを確認するには、「User.IsValidToInsert」のようなものが必要です。しかし、私は 'ModelState.IsValid'も使いたいので、 'IsValidToInsert'のデータアノテーションですべてのプロパティを手動でチェックしたくないのです。

どうすればいいですか?私は 'IsValidToInsert'のデータベースにアクセスするバリデーションを設定する必要がありますか?私は 'User'と 'ModelState'のようなパラメータをリポジトリクラスに渡すべきですか?

答えて

0

ビューに固有のビューモデルを使用する必要があります。 アクションを作成してProductを作成する場合は、ProductCreateビューモデルを作成します。製品の作成に特有のデータ注釈(またはFluent Validationなど)を記述することができます。これはあなたのView/Controllerのモデルになります。編集ページがある場合は、ProductEditビューモデルを作成します。

ユーザーが既に存在するかどうかを確認するなどのロジックがある場合は、サービスレイヤーに配置する必要があります。コントローラはできるだけシンプルにする必要があります。ビューモデルを投稿してドメインに変換するモデルおよび必要に応じて、サービス層に渡します。

[HttpPost] 
public ActionResult Create(ProductCreate model) 
{ 
    // simple validations 
    if(!ModelState.IsValid) 
    { 
     return View(model); 
    } 

    // Domain Model/Entity 
    Product product = // create a product from your model here 

    // service layer 
    ProductService.Add(product); 

    return RedirectToAction("Index"); 
} 
+0

だから、ProductServiceクラスは、リポジトリのクラスにアクセスし、あなたはそれそのように行うことができます@murilokunze私は、リポジトリに直接? – MuriloKunze

+0

を使用することはありません。そうしないとリポジトリに置くことができ、それを直接参照することができる多くのビジネスロジックを持っています。本当に状況によって異なります。 – Dismissile