您可以使用策略模式。
可以将每个条件建模为一个函数,该函数需要发布和会话,并可能返回错误:
Post -> PostContext -> Optional<String>
您可以用一个接口来表示:
@FunctionalInterfacepublic interface ValidationCondition { Optional<String> validate(final Post post, final Session session);}
因此,例如:
public class CreatorValidation implements ValidationCondition { public Optional<String> validate(final Post post, final Session session) { if (post.getCreator().equals(session.getUser()) { return Optional.empty(); } return Optional.of("You should be the owner of the post"); }}
然后,您可以将每个验证存储在列表中:
final List<ValidationCondition> conditions = new ArrayList<>();conditions.add(new CreatorValidation());conditions.add(new Scorevalidation());// etc.
使用该列表,可以批量应用验证:
final List<String> errors = new ArrayList<>();for (final ValidationCondition condition : conditions) { final Optional<String> error = condition.validate(post, session); if (error.isPresent()) { errors.add(error.get()); }}
使用Java 8 lambda,可以内联声明以下代码:
final ValidationCondition condition = (post, session) -> { // Custom logic});
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)