验证方案所需的设计解决方案

Att*_*cus 5 architecture validation design-patterns

我想验证一些对象.验证有两部分:

  • 验证用户是否有权访问该对象(特定权限已经计算并存储在布尔值中,最多有4个角色)
  • 检查对象是否处于某种状态(来自一组状态)

我有很多规则(实际上总共大约25个),比如下面那些需要验证的规则:

  • isOwner &&(status == 11 || status == 13 || status == 14)
  • !(isOwner && isReceiver && status == 12)
  • .....

我将这些规则分为几种方法,一种方法中的4或5条规则.如果规则失败,则不会检查其他规则.我需要在每个使用此验证的方法中构造一个验证器(或设置一个已构造的验证器).

我正在寻找一种设计模式,可以更容易地构建一个结构来验证对象.我的目标是能够提供特定的错误消息.例如,如果验证失败,因为用户没有权限,那么我想让他/她知道这一点.如果由于对象的状态而失败,那么我想显示它.

首先我虽然是装饰模式.我有一个错误消息处理程序对象,可以使用特定的错误消息进行修饰.一个装饰器将检查用户权限,另一个装饰器用于状态.但是我构建验证器对象的顺序无关紧要,因此不使用装饰器模式的功能.(AFAIK这是使用装饰器的一大优势 - 混合装饰).我认为链条可能更适合这种情况......?!?!您会为此方案推荐哪种设计方案?

kyo*_*ryu 2

不要考虑使用什么模式,而要考虑什么对象有意义,以及它们的行为应该是什么。

在这种情况下,您要做的是将一个对象传递给一系列规则。如果其中一条规则失败,则会触发一条消息,而其余规则不会被检查(正确吗)?

如果是这样,您会注意到我们不是在谈论数据传递到链中所有规则的场景......这表明命令链模式,而不是装饰器。

另一方面,如果您想将其传递给所有规则,那么在我看来,它更像是访问者模式。

思考理想的解决方案,然后确定模式。不要一开始就尝试寻找可应用的模式。