From 9738221070d57cdf751045c14b93da3772e643cf Mon Sep 17 00:00:00 2001 From: haerong22 Date: Sun, 13 Mar 2022 17:05:34 +0900 Subject: [PATCH] refactoring : mutable data - combine functions into transform --- .../Client1.java | 14 ++++++++ .../Client2.java | 21 +++++++++++ .../Client3.java | 14 ++++++++ .../EnrichReading.java | 4 +++ .../Reading.java | 7 ++++ .../ReadingClient.java | 27 ++++++++++++++ .../before/Client1.java | 21 +++++++++++ .../before/Client2.java | 31 ++++++++++++++++ .../before/Client3.java | 25 +++++++++++++ .../before/Reading.java | 7 ++++ .../ReadingClientTest.java | 36 +++++++++++++++++++ 11 files changed, 207 insertions(+) create mode 100644 refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/Client1.java create mode 100644 refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/Client2.java create mode 100644 refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/Client3.java create mode 100644 refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/EnrichReading.java create mode 100644 refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/Reading.java create mode 100644 refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/ReadingClient.java create mode 100644 refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/before/Client1.java create mode 100644 refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/before/Client2.java create mode 100644 refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/before/Client3.java create mode 100644 refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/before/Reading.java create mode 100644 refactoring/src/test/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/ReadingClientTest.java diff --git a/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/Client1.java b/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/Client1.java new file mode 100644 index 00000000..bc994705 --- /dev/null +++ b/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/Client1.java @@ -0,0 +1,14 @@ +package com.example.refactoring._06_mutable_data._22_combine_functions_into_transform; + +public class Client1 extends ReadingClient { + + double baseCharge; + + public Client1(Reading reading) { + this.baseCharge = enrichReading(reading).baseCharge(); + } + + public double getBaseCharge() { + return baseCharge; + } +} diff --git a/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/Client2.java b/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/Client2.java new file mode 100644 index 00000000..6927dae7 --- /dev/null +++ b/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/Client2.java @@ -0,0 +1,21 @@ +package com.example.refactoring._06_mutable_data._22_combine_functions_into_transform; + +public class Client2 extends ReadingClient { + + private double base; + private double taxableCharge; + + public Client2(Reading reading) { + EnrichReading enrichReading = enrichReading(reading); + this.base = enrichReading.baseCharge(); + this.taxableCharge = enrichReading.taxableCharge(); + } + + public double getBase() { + return base; + } + + public double getTaxableCharge() { + return taxableCharge; + } +} diff --git a/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/Client3.java b/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/Client3.java new file mode 100644 index 00000000..4d11c321 --- /dev/null +++ b/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/Client3.java @@ -0,0 +1,14 @@ +package com.example.refactoring._06_mutable_data._22_combine_functions_into_transform; + +public class Client3 extends ReadingClient{ + + private double basicChargeAmount; + + public Client3(Reading reading) { + this.basicChargeAmount = enrichReading(reading).baseCharge(); + } + + public double getBasicChargeAmount() { + return basicChargeAmount; + } +} diff --git a/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/EnrichReading.java b/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/EnrichReading.java new file mode 100644 index 00000000..0f0a43d8 --- /dev/null +++ b/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/EnrichReading.java @@ -0,0 +1,4 @@ +package com.example.refactoring._06_mutable_data._22_combine_functions_into_transform; + +public record EnrichReading(Reading reading, double baseCharge, double taxableCharge) { +} diff --git a/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/Reading.java b/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/Reading.java new file mode 100644 index 00000000..4fdaef93 --- /dev/null +++ b/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/Reading.java @@ -0,0 +1,7 @@ +package com.example.refactoring._06_mutable_data._22_combine_functions_into_transform; + +import java.time.Month; +import java.time.Year; + +public record Reading(String customer, double quantity, Month month, Year year) { +} diff --git a/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/ReadingClient.java b/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/ReadingClient.java new file mode 100644 index 00000000..e3d76495 --- /dev/null +++ b/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/ReadingClient.java @@ -0,0 +1,27 @@ +package com.example.refactoring._06_mutable_data._22_combine_functions_into_transform; + +import java.time.Month; +import java.time.Year; + +public class ReadingClient { + + protected double taxThreshold(Year year) { + return 5; + } + + protected double baseRate(Month month, Year year) { + return 10; + } + + protected EnrichReading enrichReading(Reading reading) { + return new EnrichReading(reading, baseCharge(reading), taxableCharge(reading)); + } + + private double taxableCharge(Reading reading) { + return Math.max(0, baseCharge(reading) - taxThreshold(reading.year())); + } + + private double baseCharge(Reading reading) { + return baseRate(reading.month(), reading.year()) * reading.quantity(); + } +} diff --git a/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/before/Client1.java b/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/before/Client1.java new file mode 100644 index 00000000..91ec1985 --- /dev/null +++ b/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/before/Client1.java @@ -0,0 +1,21 @@ +package com.example.refactoring._06_mutable_data._22_combine_functions_into_transform.before; + +import java.time.Month; +import java.time.Year; + +public class Client1 { + + double baseCharge; + + public Client1(Reading reading) { + this.baseCharge = baseRate(reading.month(), reading.year()) * reading.quantity(); + } + + private double baseRate(Month month, Year year) { + return 10; + } + + public double getBaseCharge() { + return baseCharge; + } +} diff --git a/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/before/Client2.java b/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/before/Client2.java new file mode 100644 index 00000000..64b23fa7 --- /dev/null +++ b/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/before/Client2.java @@ -0,0 +1,31 @@ +package com.example.refactoring._06_mutable_data._22_combine_functions_into_transform.before; + +import java.time.Month; +import java.time.Year; + +public class Client2 { + + private double base; + private double taxableCharge; + + public Client2(Reading reading) { + this.base = baseRate(reading.month(), reading.year()) * reading.quantity(); + this.taxableCharge = Math.max(0, this.base - taxThreshold(reading.year())); + } + + private double taxThreshold(Year year) { + return 5; + } + + private double baseRate(Month month, Year year) { + return 10; + } + + public double getBase() { + return base; + } + + public double getTaxableCharge() { + return taxableCharge; + } +} diff --git a/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/before/Client3.java b/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/before/Client3.java new file mode 100644 index 00000000..36aa009b --- /dev/null +++ b/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/before/Client3.java @@ -0,0 +1,25 @@ +package com.example.refactoring._06_mutable_data._22_combine_functions_into_transform.before; + +import java.time.Month; +import java.time.Year; + +public class Client3 { + + private double basicChargeAmount; + + public Client3(Reading reading) { + this.basicChargeAmount = calculateBaseCharge(reading); + } + + private double calculateBaseCharge(Reading reading) { + return baseRate(reading.month(), reading.year()) * reading.quantity(); + } + + private double baseRate(Month month, Year year) { + return 10; + } + + public double getBasicChargeAmount() { + return basicChargeAmount; + } +} diff --git a/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/before/Reading.java b/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/before/Reading.java new file mode 100644 index 00000000..fbf6bf55 --- /dev/null +++ b/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/before/Reading.java @@ -0,0 +1,7 @@ +package com.example.refactoring._06_mutable_data._22_combine_functions_into_transform.before; + +import java.time.Month; +import java.time.Year; + +public record Reading(String customer, double quantity, Month month, Year year) { +} diff --git a/refactoring/src/test/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/ReadingClientTest.java b/refactoring/src/test/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/ReadingClientTest.java new file mode 100644 index 00000000..5111f17b --- /dev/null +++ b/refactoring/src/test/java/com/example/refactoring/_06_mutable_data/_22_combine_functions_into_transform/ReadingClientTest.java @@ -0,0 +1,36 @@ +package com.example.refactoring._06_mutable_data._22_combine_functions_into_transform; + +import org.junit.jupiter.api.Test; + +import java.time.Month; +import java.time.Year; + +import static org.junit.jupiter.api.Assertions.*; + +class ReadingClientTest { + + @Test + void client1() { + Client1 client1 = new Client1(acquireReading()); + assertEquals(100d, client1.getBaseCharge()); + } + + @Test + void client2() { + Client2 client2 = new Client2(acquireReading()); + assertEquals(100d, client2.getBase()); + assertEquals(95d, client2.getTaxableCharge()); + } + + @Test + void client3() { + Client3 client3 = new Client3(acquireReading()); + assertEquals(100d, client3.getBasicChargeAmount()); + } + + + private Reading acquireReading() { + return new Reading("kim", 10, Month.MARCH, Year.of(2022)); + } + +} \ No newline at end of file