Refactored Code : Moved redundant checks to a common class for better code reusability

This commit is contained in:
lekshmysasidhar 2023-03-31 12:45:08 +02:00
parent df61c9c901
commit 7e180efd78
5 changed files with 53 additions and 25 deletions

View File

@ -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);
}
}
}

View File

@ -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;
}
}

View File

@ -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--;
}
}

View File

@ -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++;
}
}
}

View File

@ -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() {
}
}