From 7e180efd781d5b079336f9f749ae42818906b88c Mon Sep 17 00:00:00 2001 From: lekshmysasidhar Date: Fri, 31 Mar 2023 12:45:08 +0200 Subject: [PATCH] Refactored Code : Moved redundant checks to a common class for better code reusability --- .../main/java/com/gildedrose/AgedBrie.java | 19 +++++++--------- .../java/com/gildedrose/BackStagePasses.java | 22 +++++++++---------- .../src/main/java/com/gildedrose/Generic.java | 7 ++++-- Java/src/main/java/com/gildedrose/Goods.java | 8 +++++++ .../com/gildedrose/rule/ValidationRule.java | 22 +++++++++++++++++++ 5 files changed, 53 insertions(+), 25 deletions(-) create mode 100644 Java/src/main/java/com/gildedrose/rule/ValidationRule.java diff --git a/Java/src/main/java/com/gildedrose/AgedBrie.java b/Java/src/main/java/com/gildedrose/AgedBrie.java index 9c7102eb..53f58ae2 100644 --- a/Java/src/main/java/com/gildedrose/AgedBrie.java +++ b/Java/src/main/java/com/gildedrose/AgedBrie.java @@ -1,25 +1,22 @@ package com.gildedrose; +import static com.gildedrose.rule.ValidationRule.isExpired; + public class AgedBrie implements Goods { + private static final int MAX_ALLOWED_QUALITY = 50; @Override public void updateQuality(Item item) { - addQualityWhenWithInLimit(item); + Goods.super.addQualityWhenWithInLimit(item, MAX_ALLOWED_QUALITY); } - + @Override public void updateQualityForExpiredItem(Item item) { - if (item.sellIn < 0) { - addQualityWhenWithInLimit(item); - } - - } - - private void addQualityWhenWithInLimit(Item item) { - if (item.quality < MAX_ALLOWED_QUALITY) { - item.quality++; + if (isExpired(item)) { + Goods.super.addQualityWhenWithInLimit(item, MAX_ALLOWED_QUALITY); } } + } diff --git a/Java/src/main/java/com/gildedrose/BackStagePasses.java b/Java/src/main/java/com/gildedrose/BackStagePasses.java index eba9b2dc..8430c54a 100644 --- a/Java/src/main/java/com/gildedrose/BackStagePasses.java +++ b/Java/src/main/java/com/gildedrose/BackStagePasses.java @@ -1,5 +1,7 @@ package com.gildedrose; +import static com.gildedrose.rule.ValidationRule.*; + public class BackStagePasses implements Goods { private static final int MAX_ALLOWED_QUALITY = 50; @@ -9,24 +11,20 @@ public class BackStagePasses implements Goods { @Override public void updateQuality(Item item) { - addQualityWhenWithInLimit(item); - if (item.sellIn < SELL_IN_MAX_THRESHOLD_DAY) { - addQualityWhenWithInLimit(item); - } - if (item.sellIn < SELL_IN_MIN_THRESHOLD_DAY) { - addQualityWhenWithInLimit(item); - } - } + Goods.super.addQualityWhenWithInLimit(item, MAX_ALLOWED_QUALITY); - private void addQualityWhenWithInLimit(Item item) { - if (item.quality < MAX_ALLOWED_QUALITY) { - item.quality++; + if (isWithInLimit(SELL_IN_MAX_THRESHOLD_DAY, item.sellIn)) { + Goods.super.addQualityWhenWithInLimit(item, MAX_ALLOWED_QUALITY); + } + if (isWithInLimit(SELL_IN_MIN_THRESHOLD_DAY, item.sellIn)) { + Goods.super.addQualityWhenWithInLimit(item, MAX_ALLOWED_QUALITY); } } + @Override public void updateQualityForExpiredItem(Item item) { - if (item.sellIn < 0) { + if (isExpired(item)) { item.quality = ZERO; } } diff --git a/Java/src/main/java/com/gildedrose/Generic.java b/Java/src/main/java/com/gildedrose/Generic.java index f56c3459..4c092280 100644 --- a/Java/src/main/java/com/gildedrose/Generic.java +++ b/Java/src/main/java/com/gildedrose/Generic.java @@ -1,16 +1,19 @@ package com.gildedrose; +import static com.gildedrose.rule.ValidationRule.*; + public class Generic implements Goods { + @Override public void updateQuality(Item item) { - if (item.quality > 0) { + if (hasMinimumRequiredQuality(item)) { item.quality--; } } @Override public void updateQualityForExpiredItem(Item item) { - if (item.sellIn < 0 && item.quality > 0) { + if (isExpired(item) && hasMinimumRequiredQuality(item)) { item.quality--; } } diff --git a/Java/src/main/java/com/gildedrose/Goods.java b/Java/src/main/java/com/gildedrose/Goods.java index 5393c77c..4e77fc56 100644 --- a/Java/src/main/java/com/gildedrose/Goods.java +++ b/Java/src/main/java/com/gildedrose/Goods.java @@ -1,5 +1,7 @@ package com.gildedrose; +import static com.gildedrose.rule.ValidationRule.isWithInLimit; + public interface Goods { public void updateQuality(Item item); @@ -9,4 +11,10 @@ public interface Goods { } public void updateQualityForExpiredItem(Item item); + + default void addQualityWhenWithInLimit(Item item, int limit) { + if (isWithInLimit(limit, item.quality)) { + item.quality++; + } + } } diff --git a/Java/src/main/java/com/gildedrose/rule/ValidationRule.java b/Java/src/main/java/com/gildedrose/rule/ValidationRule.java new file mode 100644 index 00000000..0c1b1f13 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/rule/ValidationRule.java @@ -0,0 +1,22 @@ +package com.gildedrose.rule; + +import com.gildedrose.Item; + +public final class ValidationRule { + + public static boolean isWithInLimit(int limit, int value) { + return value < limit; + } + + public static boolean isExpired(Item item) { + return item.sellIn < 0; + } + + public static boolean hasMinimumRequiredQuality(Item item) { + return item.quality > 0; + } + + private ValidationRule() { + } + +}