mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-16 06:51:27 +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;
|
package com.gildedrose;
|
||||||
|
|
||||||
|
import static com.gildedrose.rule.ValidationRule.isExpired;
|
||||||
|
|
||||||
public class AgedBrie implements Goods {
|
public class AgedBrie implements Goods {
|
||||||
|
|
||||||
private static final int MAX_ALLOWED_QUALITY = 50;
|
private static final int MAX_ALLOWED_QUALITY = 50;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateQuality(Item item) {
|
public void updateQuality(Item item) {
|
||||||
addQualityWhenWithInLimit(item);
|
Goods.super.addQualityWhenWithInLimit(item, MAX_ALLOWED_QUALITY);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateQualityForExpiredItem(Item item) {
|
public void updateQualityForExpiredItem(Item item) {
|
||||||
if (item.sellIn < 0) {
|
if (isExpired(item)) {
|
||||||
addQualityWhenWithInLimit(item);
|
Goods.super.addQualityWhenWithInLimit(item, MAX_ALLOWED_QUALITY);
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void addQualityWhenWithInLimit(Item item) {
|
|
||||||
if (item.quality < MAX_ALLOWED_QUALITY) {
|
|
||||||
item.quality++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,7 @@
|
|||||||
package com.gildedrose;
|
package com.gildedrose;
|
||||||
|
|
||||||
|
import static com.gildedrose.rule.ValidationRule.*;
|
||||||
|
|
||||||
public class BackStagePasses implements Goods {
|
public class BackStagePasses implements Goods {
|
||||||
|
|
||||||
private static final int MAX_ALLOWED_QUALITY = 50;
|
private static final int MAX_ALLOWED_QUALITY = 50;
|
||||||
@ -9,24 +11,20 @@ public class BackStagePasses implements Goods {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateQuality(Item item) {
|
public void updateQuality(Item item) {
|
||||||
addQualityWhenWithInLimit(item);
|
Goods.super.addQualityWhenWithInLimit(item, MAX_ALLOWED_QUALITY);
|
||||||
if (item.sellIn < SELL_IN_MAX_THRESHOLD_DAY) {
|
|
||||||
addQualityWhenWithInLimit(item);
|
|
||||||
}
|
|
||||||
if (item.sellIn < SELL_IN_MIN_THRESHOLD_DAY) {
|
|
||||||
addQualityWhenWithInLimit(item);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void addQualityWhenWithInLimit(Item item) {
|
if (isWithInLimit(SELL_IN_MAX_THRESHOLD_DAY, item.sellIn)) {
|
||||||
if (item.quality < MAX_ALLOWED_QUALITY) {
|
Goods.super.addQualityWhenWithInLimit(item, MAX_ALLOWED_QUALITY);
|
||||||
item.quality++;
|
}
|
||||||
|
if (isWithInLimit(SELL_IN_MIN_THRESHOLD_DAY, item.sellIn)) {
|
||||||
|
Goods.super.addQualityWhenWithInLimit(item, MAX_ALLOWED_QUALITY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateQualityForExpiredItem(Item item) {
|
public void updateQualityForExpiredItem(Item item) {
|
||||||
if (item.sellIn < 0) {
|
if (isExpired(item)) {
|
||||||
item.quality = ZERO;
|
item.quality = ZERO;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,16 +1,19 @@
|
|||||||
package com.gildedrose;
|
package com.gildedrose;
|
||||||
|
|
||||||
|
import static com.gildedrose.rule.ValidationRule.*;
|
||||||
|
|
||||||
public class Generic implements Goods {
|
public class Generic implements Goods {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateQuality(Item item) {
|
public void updateQuality(Item item) {
|
||||||
if (item.quality > 0) {
|
if (hasMinimumRequiredQuality(item)) {
|
||||||
item.quality--;
|
item.quality--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateQualityForExpiredItem(Item item) {
|
public void updateQualityForExpiredItem(Item item) {
|
||||||
if (item.sellIn < 0 && item.quality > 0) {
|
if (isExpired(item) && hasMinimumRequiredQuality(item)) {
|
||||||
item.quality--;
|
item.quality--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,7 @@
|
|||||||
package com.gildedrose;
|
package com.gildedrose;
|
||||||
|
|
||||||
|
import static com.gildedrose.rule.ValidationRule.isWithInLimit;
|
||||||
|
|
||||||
public interface Goods {
|
public interface Goods {
|
||||||
|
|
||||||
public void updateQuality(Item item);
|
public void updateQuality(Item item);
|
||||||
@ -9,4 +11,10 @@ public interface Goods {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void updateQualityForExpiredItem(Item item);
|
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