1

私は、エンティティが不完全な状態で作成され、しばらくの間不完全なままである可​​能性が高いコンテンツ開発シナリオで作業しています。関連するワークフローは非常にアドホックであり、より構造化されたDDDアプローチを使用できません。

常に満たす必要のある一連の検証ルールと、エンティティが「完了する」前に満たす必要のある一連の検証ルールがあります。

組み込みのASP.NETMVC検証を使用して、前者を検証しています。後者をキャプチャするためにどのようなアプローチを使用できますか?

例えば:-

public class Foo
{
  public int Id { get; set; }

  public virtual ICollection<Bar> Bars { get; set; }
}

public class Bar
{
  public int Id { get; set; }

  [Required] // A Bar must be owned by a Foo at all times
  public int FooId { get; set; }
  public virtual Foo Foo { get; set; }

  [Required] // A Bar must have a working title at all times
  public string WorkingTitle { get; set; }

  public bool IsComplete { get; set; }

  // Cannot use RequiredAttribute on Description as the
  // entity is very likely to be created without one,
  // however a Description is required before the entity
  // can be marked as "IsComplete"
  public string Description { get; set; }
}
4

1 に答える 1

1

使用できるさまざまなアプローチがあります。

  • モデルにIValidatableObjectインターフェースを実装させ、データ注釈を使用せずに条件付き検証を実行させます。
  • Descriptionプロパティの値に基づいてプロパティの条件付き検証ロジックを実行するカスタム検証属性を記述しIsCompleteます。
  • 検証属性がすでに定義されているMvcFoolproofを使用RequiredIfして、自分で作成する必要がないようにします。
  • FluentValidation.NETを使用すると、検証ルールを流暢に表現できます。このライブラリを使用して条件付き検証ルールを作成することは、洗練されているだけでなく、非常に簡単です。ASP.NET MVCとうまく統合され検証ロジックを個別に簡単に単体テストすることもできます。

個人的にはFV.NETを使用しますが、ニーズに適している場合は、他のアプローチを使用できます。

于 2012-10-08T09:11:44.427 に答える