mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-15 22:41:30 +00:00
Refactored Code : Moved redundant checks to a common class for better code reusability
This commit is contained in:
parent
df61c9c901
commit
7e180efd78
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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--;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
22
Java/src/main/java/com/gildedrose/rule/ValidationRule.java
Normal file
22
Java/src/main/java/com/gildedrose/rule/ValidationRule.java
Normal 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() {
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user