私は最高の多層設計の慣行を遵守しようとしており、MVCコントローラがDAL(またはそれに関するIRepository)とやりとりしないようにしたいと考えています。適切なビジネスルールと検証を実施するには、ビジネスサービスレイヤーを通過する必要があります。検証 - ドメインモデルエンティティでさまざまな検証属性([必須]など)を使用してコントローラで検証を実行したくないのは、フロントエンドでこの問題が発生するためです。このサービスは、WPFのフロントエンドを通じて実装することもできます。MVC検証 - サービス層でDRYを維持する - ベストプラクティスとは何ですか?
私の検証は私のサービス層で行われているので、値をUIに戻すためのベストプラクティスは何ですか?私は失敗したかどうかを知る必要があるので、私は 'void addWhatever(int somethingsID)'を望んでいません。ブール値でなければなりませんか? Enumでなければならないのでしょうか?例外処理を利用すべきですか?または、モデルオブジェクトに検証属性を付加するときにMVCで使用されるものと同様のIValidationDictionaryオブジェクトを返しますか? (後で必要に応じてUIのアダプタパターンを使用することができます)
コントローラからサービスレイヤに自分のエンティティを渡し、検証/データパーシスタンスが失敗したかどうかを確認したいと思います。また、検証に失敗した可能性のあるフィールドごとに適切なエラーメッセージを表示するビューを返す必要があるという事実を忘れたくはありません(私はできるだけ痛みのない状態にしておきたい)。
私にはいくつかのアイデアがありましたが、そのすべてが正しく感じられません。答えにはビュー固有モデルのエンティティが含まれているように感じますが、これは処理しなければならないマッピングの問題全体につながります。ベストプラクティスとは何ですか?
これはかなり古い質問ですが、私はそのテーマについて少し説明したいと思います。 'username'は15文字を超えてはならず、一意でなければならないことを検証する必要があるとします。コントローラーで15文字の制限が発生し、サービスで一意性が確認されますか? – Aquillo
@Aquillo - いいえ、両方の場所で両方を検証します。この回答は、一般的なビューと検証についてのものであり、特定のアイテムに関するものではありません。 MVCはプロパティではなく「モデル」を検証し、0以上の検証を持つことができる0以上のプロパティでモデルを構成します。 MVCは「このモデルは有効ですか」としか言いません。 –