سؤال

أنا أقوم بتنفيذ نمط المواصفات. يبدو عدم التمييز بسيطًا في البداية:

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

لكنه لا يعمل لجميع المواصفات:

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

هذا يجب أن يعود خطأ بدلا من صحيح. حتى الآن أعتقد أن الطريقة الوحيدة لإنجاز isspecialcaseof the notspecifice هي تنفيذ ما تبقى من الباقي (الاستهلاك الجزئي في الورقة على نمط المواصفات). لكن ربما أفتقد شيئًا أكثر بساطة أو رؤية منطقية تجعل هذا غير ضروري.

سؤال: هل هناك طريقة أخرى لتنفيذ هذا من خلال عدم استخدام الباقي للرضا؟

هل كانت مفيدة؟

المحلول

لقد حاولت تنفيذ هذا في Java وذهب دون مشاكل وتبقى راضية (). ربما تكون لديك بعض المشكلات في تنفيذك ، وإليك لي:

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

الصيد في طريقة NOT () ، والتي يجب أن تبني بشكل صحيح نوع معاكس من وسيطته.

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

ثم كل ما أحتاجه هو أن يكون للتنفيذ الصحيح لـ NOT () لكل مواصفات ، على سبيل المثال لأقل من Lesserthan:

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

إذا كانت لديك أي مشاكل ، فيرجى تقديم تنفيذ Greatherthan.isspecialcaseof وليس ، سأحاول المساعدة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top