私はasp.net mvcの最高のpraticesでDDDの原則を実装するための最良の方法はどのようにいくつかの質問があります。実際、私はあなたがどのように(ビューモデルまたはモデルで)バリデーションを行ってきたのかを知りたいと思いますか?MVCでViewModelをクリーンアップし、検証する方法は?
私は、このドメインモデルとビューモデルを持っている:
public class Product {
public int Id { get; protected set; }
public string Name { get; set; }
public decimal Price { get; set; }
public int Stock { get; set; }
public Category Category { get; set; }
public Supplier Supplier { get; set; }
public string Code { get; set; } // it has to be unique
}
public class ProductViewModel {
public int Id { get; set; }
/* other simple properties */
public int IdCategory { get; set; }
public int IdSupplier { get; set; }
public string Code { get; set; }
}
[OK]をクリックします。モデルはNHibernateにマップされ、うまく動作します。 ViewModelまたはDomainModelの検証を作成する方が良いかどうか知りたいですか?私はasp.net mvcのアクションでViewModelを受信すると、それを検証しますが、ビジネスモデルをviewmodelに追加すると間違っていませんか?これらのビジネス検証を自分のドメインに追加する方が良いことが分かっているので、私はこれを尋ねますが、私は自分の投稿で2つの検証を行う必要がありますか? asp.net mvcで私の行動を見てください:
[Post]
public ActionResult Update(ProductViewModel viewModel) {
// what kind of validations should I do here?
if (invalid) {
return View(viewModel);
}
// how can I return the errors to my View?
// Is here any best pratice to transform from ViewModel to Domain instance?
Product product = ???
_repository.Save(product);
return RedirectToAction("Index");
}
誰かがコードで例を挙げることはできますか?
ありがとうございます。サンプルでは、私の製品のCodeプロパティ(例)はユーザー名のように、すべての製品に固有のものです。ビジネスモデルにエラーがある場合は、マップ(VMからDomaniへ)の後に検証し、Viewにエラーを戻すにはどうすればよいですか? –
@felipeoriani、私は私の答えで言ったようにさまざまな方法があります。 1つのアプローチは 'TryXXX'パターンを使うことです。もう1つの方法は、ModelStateディクショナリをビジネス層に渡して、エラーメッセージを直接追加することです。 –
はい、私は後でそれを実装しようとし、私はあなたのaswserを確認するために戻ってきます。ありがとうダーリン...そしてはい、私もFluentValidationを使用することを好む=) –