1

ユーザー入力の検証とビジネスオブジェクトの検証に頭を悩ませようとしています。Customerオブジェクトを操作しているとしましょう。次のプロパティがあります:CustomerId、FirstName、LastName。FirstNameとLastNameは必須であり、それらの長さは50文字を超えることはできません。

ASP.NET MVC 3を使用しています。FluentValidationも実験しています(ただし、この検証フレームワークである必要はありません)。

「顧客の作成」ビューを使用しているときに、ビューにCustomerViewModelを渡します。

[Validator(typeof(CustomerViewModelValidator))]
public class CustomerViewModel
{
   public string FirstName { get; set; }
   public string LastName { get; set; }
}

CustomerViewModelValidatorで、上記のように検証に必要なルールを設定しました。これはすべて、ビューで正常に検証されます。今、私は質問があります。私のアプリケーションにはサービスレイヤーがあり、ここではすべてのアプリケーションロジックを適用したいと思います。新しい顧客を保存したいとします。次に、CustomerRepositoryのSaveメソッドを呼び出すCustomerServiceのSavecustomerメソッドがあります。

サービスレイヤーを利用する別のアプリケーション(上記のWebアプリ以外)がある可能性があります。つまり、Customerオブジェクトが作成された場合は、それを検証する必要があるということです。次の質問が発生します。

  • FirstNameとLastNameを確認するために、CustomerServiceでもCustomerオブジェクトを検証する必要がありますか?
  • Customerクラスを検証するために、新しいバリデータークラスを作成する方がよいでしょうか?それとも私はそれを共有する必要がありますか?
  • CustomerIdも検証する必要がありますか?つまり、ゼロより大きくする必要がありますが、Idが0の新しい顧客をどのように有効にしますか?

誰かがこれについての洞察/記事を共有することができればそれはありがたいです。

いくつかのビジネスルールも追加したいのですが、これはどこにありますか?ビジネスルールをどこでどのように実装しますか?

4

1 に答える 1

0

FirstNameとLastNameを確認するために、CustomerServiceでもCustomerオブジェクトを検証する必要がありますか?

この問題については異なる意見があるかもしれませんが、私の意見では、再利用可能なサービスを作成する場合は、サービスレベルでCustomerオブジェクトを検証する方が正しいでしょう。

Customerクラスを検証するために、新しいバリデータークラスを作成する方がよいでしょうか?それとも私はそれを共有する必要がありますか?

新しいバリデーターを作成する必要があります。CustomerViewModelCustomerは2つの異なるクラスであることを忘れないでください。ビューモデルは特定のビューに固有であり、モデルクラスのプロパティのサブセットまたはスーパーセットが含まれている場合があります。サービスレイヤーでの検証では、ビジネスルールのみを検証する必要があります。SQLサーバーを使用している場合、この検証はデータベースレベルで(列の長さを設定することで)実行することもでき、これらのビジネスルールの一部が違反しました。

于 2011-01-14T23:03:01.773 に答える