Skip to content

Commit 52c8a77

Browse files
committed
Clarify the Value Object concept
1 parent 268b52a commit 52c8a77

File tree

2 files changed

+22
-13
lines changed

2 files changed

+22
-13
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package pl.mperor.lab.java.clean.code.ddd.value.object;
22

3-
import java.time.LocalDateTime;
3+
import java.time.LocalDate;
44

5-
record DateTimeRange(LocalDateTime start, LocalDateTime end) {
5+
record DateRange(LocalDate start, LocalDate end) {
66

7-
DateTimeRange {
7+
DateRange {
88
if (start == null || end == null) {
99
throw new IllegalArgumentException("Date range start & end cannot be null!");
1010
}
@@ -13,7 +13,7 @@ record DateTimeRange(LocalDateTime start, LocalDateTime end) {
1313
}
1414
}
1515

16-
boolean isWithinRange(LocalDateTime dateTime) {
16+
boolean isWithinRange(LocalDate dateTime) {
1717
return !dateTime.isBefore(start) && !dateTime.isAfter(end);
1818
}
1919
}

CleanCode/src/test/java/pl/mperor/lab/java/clean/code/ddd/value/object/ValueObjectTest.java

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,18 @@
55

66
import java.math.BigDecimal;
77
import java.math.RoundingMode;
8-
import java.time.LocalDateTime;
9-
10-
8+
import java.time.LocalDate;
9+
10+
/**
11+
* 🧩 Value Object
12+
*
13+
* <p>A small simple object, like money or a date range, whose equality isn't based on identity.
14+
*
15+
* <p><b>Key Traits:</b>
16+
* - Immutable 🚫
17+
* - Equality by values ✅
18+
* - Reusable & shareable ♻️
19+
*/
1120
class ValueObjectTest {
1221

1322
@Test
@@ -33,11 +42,11 @@ void shouldAllowToUseEmailAddressAsValueObject() {
3342

3443
@Test
3544
void shouldAllowToUseDateTimeRangeAsValueObject() {
36-
Assertions.assertTrue(new DateTimeRange(LocalDateTime.MIN, LocalDateTime.MAX)
37-
.isWithinRange(LocalDateTime.now()));
38-
Assertions.assertTrue(new DateTimeRange(LocalDateTime.MIN, LocalDateTime.MAX)
39-
.isWithinRange(LocalDateTime.MIN));
40-
Assertions.assertTrue(new DateTimeRange(LocalDateTime.MIN, LocalDateTime.MAX)
41-
.isWithinRange(LocalDateTime.MAX));
45+
Assertions.assertTrue(new DateRange(LocalDate.MIN, LocalDate.MAX)
46+
.isWithinRange(LocalDate.now()));
47+
Assertions.assertTrue(new DateRange(LocalDate.MIN, LocalDate.MAX)
48+
.isWithinRange(LocalDate.MIN));
49+
Assertions.assertTrue(new DateRange(LocalDate.MIN, LocalDate.MAX)
50+
.isWithinRange(LocalDate.MAX));
4251
}
4352
}

0 commit comments

Comments
 (0)