diff --git a/CleanCode/src/main/java/pl/mperor/lab/java/clean/code/ddd/value/object/Money.java b/CleanCode/src/main/java/pl/mperor/lab/java/clean/code/ddd/value/object/Money.java index a6ff19f..b51d4e0 100644 --- a/CleanCode/src/main/java/pl/mperor/lab/java/clean/code/ddd/value/object/Money.java +++ b/CleanCode/src/main/java/pl/mperor/lab/java/clean/code/ddd/value/object/Money.java @@ -3,9 +3,11 @@ import java.math.BigDecimal; import java.math.RoundingMode; -record Money(BigDecimal amount) { +public record Money(BigDecimal amount) { - Money(BigDecimal amount) { + public static Money ZERO = new Money(BigDecimal.ZERO); + + public Money(BigDecimal amount) { if (amount == null) { throw new IllegalArgumentException("Amount must not be null"); } @@ -27,6 +29,10 @@ public Money subtract(Money other) { return new Money(this.amount.subtract(other.amount)); } + public Money multiply(BigDecimal multiplier) { + return new Money(this.amount.multiply(multiplier)); + } + public static Money of(BigDecimal amount) { return new Money(amount); } diff --git a/CleanCode/src/main/java/pl/mperor/lab/java/clean/code/grasp/GRASP.java b/CleanCode/src/main/java/pl/mperor/lab/java/clean/code/grasp/GRASP.java new file mode 100644 index 0000000..b48d8e9 --- /dev/null +++ b/CleanCode/src/main/java/pl/mperor/lab/java/clean/code/grasp/GRASP.java @@ -0,0 +1,8 @@ +package pl.mperor.lab.java.clean.code.grasp; + +/** + * General Responsibility Assignment Software Pattern (1997) + * - OOP design principles. + */ +public interface GRASP { +} diff --git a/CleanCode/src/test/java/pl/mperor/lab/java/clean/code/ddd/value/object/ValueObjectTest.java b/CleanCode/src/test/java/pl/mperor/lab/java/clean/code/ddd/value/object/ValueObjectTest.java index b1d1bf3..57e5ddd 100644 --- a/CleanCode/src/test/java/pl/mperor/lab/java/clean/code/ddd/value/object/ValueObjectTest.java +++ b/CleanCode/src/test/java/pl/mperor/lab/java/clean/code/ddd/value/object/ValueObjectTest.java @@ -21,7 +21,7 @@ class ValueObjectTest { @Test void shouldAllowToUseMoneyAsValueObject() { - var money = Money.of(BigDecimal.ZERO); + var money = Money.ZERO; Assertions.assertEquals(BigDecimal.ZERO.setScale(2, RoundingMode.HALF_EVEN), money.amount()); Assertions.assertThrows(IllegalArgumentException.class, () -> new Money(null)); diff --git a/CleanCode/src/test/java/pl/mperor/lab/java/clean/code/grasp/InformationExpertTest.java b/CleanCode/src/test/java/pl/mperor/lab/java/clean/code/grasp/InformationExpertTest.java new file mode 100644 index 0000000..ce9b7fa --- /dev/null +++ b/CleanCode/src/test/java/pl/mperor/lab/java/clean/code/grasp/InformationExpertTest.java @@ -0,0 +1,68 @@ +package pl.mperor.lab.java.clean.code.grasp; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import pl.mperor.lab.java.clean.code.ddd.value.object.Money; + +import java.math.BigDecimal; +import java.util.Arrays; +import java.util.List; + +/** + * 🤓 Information Expert + * + *
The principle states that a class should be responsible for behavior + * that is directly related to its data. + * + * This test verifies that: + *