質問

私は、仕様パターンを実装しています。 NotSpecificationは、最初は簡単なようです。

NotSpecification.IsSpecialCaseOf(otherSpecification)
    return !this.specification.isSpecialCaseOf(otherSpecification)

しかし、それはすべての仕様は動作しません。

Not(LesserThan(4)).IsSpecialCaseOf(Equals(5))

これは、偽の代わりにtrueを返す必要があります。これまでのところ私はisSpecialCaseOfにNotSpecificationを達成する唯一の方法はremainderUnsatisfiedBy(仕様パターンについての論文で部分的包摂)を実装することだと思います。しかし、多分私はもっとシンプルなものか、これが不要になり、論理洞察力が不足しています。

質問:remainderUnsatisfiedByを使用しないことによってこれを実現するための別の方法があります。

役に立ちましたか?

解決

私はJavaでこれを実装しようとした、それが問題とremainderUnsatisfiedBy()せずに行ってきました。おそらく、あなたはここで、あなたの実装では、いくつかの問題を抱えている私のものです。

public boolean isSpecialCaseOf(Specification spec) {
    if (spec instanceof GreaterThan) {
        return ((GreaterThan) spec).boundary > this.boundary;
    }
    return false;
}

キャッチが正しく、引数の逆のタイプを構築するべきではない()メソッドです。

static final Specification Not(Specification spec) {
    return spec.not();
}

そして、すべて私の必要性がない(の正しい実装を持つことである)すべての仕様のために、例えばLesserThanためます:

    @Override
public Specification not() {
    return new GreaterThan(boundary);
}

あなたが何か問題がある場合は、GreatherThan.isSpecialCaseOfのとないの実装を提供してください、私がお手伝いします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top