2011-01-19 10 views
3

私は最初のDDDアプリケーションを開発しており、ここ数ヶ月で勉強したいくつかの基本的なルールに従っています。ASP.NET MVCでのDDD、ビューモデル、および検証

Nhibernateでリポジトリパターンを実装しました。
私はエンティティをコントローラからビューに "移動"させることができたと思っていましたが、すぐに私はそれがほとんど不可能であることを認識しました。

ほとんどの人は、各ビューに固有のビューモデルを定義する方が好きです。
私は、自分のエンティティについて既に作成したフィールドを再定義するという考えは特に気にしませんが、これが唯一の方法だと思われます。

今、いくつかの検証ルールを付けたいという状況に直面しています。
エンティティに検証ルール(DataAnnotations付き)を添付できたと思っていますが、ビューモデルを使用している場合は機能しません。

ここでの質問は以下のとおりです。

  • は、検証は、ドメインモデルの一部ではないでしょうか?
  • モデルを作成してから、ビューモデルの同じフィールド(プロパティ)を再マップするのに時間がかかりませんか?
  • 少なくとも妥当性検査のルールがない場合、これは貧困モデルではありませんか? DDDが中小規模のアプリケーションに本当に適しているかどうか疑問に思っています。

ご協力いただきありがとうございます。

答えて

6

これは何百回もここに尋ねられています。これは何百回も答えました(これはあなたにこれを尋ねる最初の人物です:-)):ユーザー検証ロジックをビューモデルに入れますフィールド名、日時書式など)を入力し、エンティティにビジネス検証ロジックを設定します(ユーザー名がすでに取得されている、ユーザーが最大クォータに達しているため、

+3

私たちは今何千人もいると思います。 – jfar

+0

この種類のサーバー側の検証について説明しているtopic/bookへのリンクを教えてください。私が見たのは、DataAnotationを使った検証です。オブジェクトを保存するときには、検証とオブジェクトの永続化を担当する新しいサービスレイヤーを使用するか、サーバー側の検証のみを行うレイヤーを使用しますか?ありがとうございました! –

+0

@šljaker、これは使用している検証フレームワークによって異なります。個人的に私はデータアノテーションの大ファンではありません。私は[FluentValidation.Net](http://fluentvalidation.codeplex.com/)を使用します。 usernameのようなビジネスルールが既にデータベースに存在する場合、奇跡は期待しないでください。データベースを照会し、結果を確認してください。 –

3

ドメインモデル の一部ではありませんか?

私はそれがドメインモデルとビューモデルの両方にあるべきだと思います。ビューモデルの検証では、--datetime、decimal、intなどのタイプの入力が有効かどうかを確認しますが、ドメインモデルの検証では、アプリケーション固有のルールをチェックする必要があります。このように、別のUIを使用することを決定したとしても、ビジネス検証は引き続き行われますが、UIは入力検証を処理する必要があります。

それは時間 モデルを作成し、 のviewmodelに 同じフィールド(プロパティ)を再マップするために時間を過ごすために消費しませんか?

これに役立つツールは、たとえばautomapper(コード)です。私の意見では、これはBLLとUIの間のより明確な分離をもたらします。

このアプローチは全体的に時間がかかりますが、スケーラビリティも向上します。将来的にアプリケーションを拡張する必要がある場合は、アーキテクチャを設計する合理的な方法です。

+0

ありがとうsTodorov。私はautomapperについて読んでいましたが、私はほとんど誘惑されましたが、私のモデルはかなりシンプルで時間が節約できないと思っていました。 – LeftyX

関連する問題