1

我正在一个内容开发场景中工作,其中实体很可能在不完整状态下创建并在一段时间内保持不完整。所涉及的工作流程非常临时,使我无法使用更结构化的 DDD 方法。

我有一组必须始终满足的验证规则,以及在实体“完成”之前必须满足的另一组验证规则。

我已经在使用内置的 ASP.NET MVC 验证来验证前者。我可以用什么方法来捕捉后者?

例如:-

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
  • 使用已经为您定义了验证属性的Mvc FoolproofRequiredIf ,这样您就不需要自己编写了。
  • 使用FluentValidation.NET,它允许您以流畅的方式表达您的验证规则。使用这个库编写条件验证规则不仅优雅而且非常容易。它与 ASP.NET MVC 很好地集成,还允许您轻松地对您的验证逻辑进行单独的单元测试。

我个人会使用 FV.NET,但如果它更适合您的需求,您可以使用任何其他方法。

于 2012-10-08T09:11:44.427 回答