funkygao/cp-ddd-framework

View on GitHub
dddplus-spec/src/main/java/io/github/dddplus/model/spcification/ISpecification.java

Summary

Maintainability
A
0 mins
Test Coverage
/*
 * Copyright DDDplus Authors.
 *
 * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
 */
package io.github.dddplus.model.spcification;

/**
 * Specification interface,归约模式(Specification Pattern).
 * <p>
 * <p>{@link ISpecification} is part of our DDD building block.</p>
 * <p>Specifications are small, single‐purpose classes(SRP), similar to policies.</p>
 * <ul>不是Always-Valid Model吗?为什么还把规约提出来?不违反该原则吗?
 * <li>if validation depends exclusively on an entity's data then it stays inside the entity</li>
 * <li>if validation depends on information from multiple entities or external services, use Specification</li>
 * </ul>
 */
public interface ISpecification<T> {

    /**
     * Check if {@code candidate} is satisfied by the specification.
     *
     * @param candidate
     * @return
     */
    boolean isSatisfiedBy(T candidate);

    /**
     * Same as {@link #isSatisfiedBy(Object)} except that it accepts {@link Notification} to pass more detailed error info.
     *
     * @param candidate
     * @param notification
     * @return
     */
    boolean isSatisfiedBy(T candidate, Notification notification);
}