Преглед изворни кода

Made DTOs truly immutable.

peter_backlund пре 17 година
родитељ
комит
8ec095cd03

+ 4
- 16
dddsample/tracking/booking-api/src/main/java/se/citerus/dddsample/tracking/booking/api/CargoRoutingDTO.java Прегледај датотеку

@@ -1,6 +1,7 @@
1 1
 package se.citerus.dddsample.tracking.booking.api;
2 2
 
3 3
 import java.io.Serializable;
4
+import java.util.ArrayList;
4 5
 import java.util.Collections;
5 6
 import java.util.Date;
6 7
 import java.util.List;
@@ -17,24 +18,14 @@ public final class CargoRoutingDTO implements Serializable {
17 18
   private final boolean misrouted;
18 19
   private final List<LegDTO> legs;
19 20
 
20
-  /**
21
-   * Constructor.
22
-   *
23
-   * @param trackingId
24
-   * @param origin
25
-   * @param finalDestination
26
-   * @param arrivalDeadline
27
-   * @param misrouted
28
-   * @param legs
29
-   */
30 21
   public CargoRoutingDTO(final String trackingId, final String origin, final String finalDestination,
31 22
                          final Date arrivalDeadline, final boolean misrouted, final List<LegDTO> legs) {
32 23
     this.trackingId = trackingId;
33 24
     this.origin = origin;
34 25
     this.finalDestination = finalDestination;
35
-    this.arrivalDeadline = arrivalDeadline;
26
+    this.arrivalDeadline = new Date(arrivalDeadline.getTime());
36 27
     this.misrouted = misrouted;
37
-    this.legs = legs;
28
+    this.legs = new ArrayList<LegDTO>(legs);
38 29
   }
39 30
 
40 31
   public String getTrackingId() {
@@ -49,9 +40,6 @@ public final class CargoRoutingDTO implements Serializable {
49 40
     return finalDestination;
50 41
   }
51 42
 
52
-  /**
53
-   * @return An unmodifiable list DTOs.
54
-   */
55 43
   public List<LegDTO> getLegs() {
56 44
     return Collections.unmodifiableList(legs);
57 45
   }
@@ -61,7 +49,7 @@ public final class CargoRoutingDTO implements Serializable {
61 49
   }
62 50
 
63 51
   public Date getArrivalDeadline() {
64
-    return arrivalDeadline;
52
+    return new Date(arrivalDeadline.getTime());
65 53
   }
66 54
 
67 55
 }

+ 5
- 5
dddsample/tracking/booking-api/src/main/java/se/citerus/dddsample/tracking/booking/api/LegDTO.java Прегледај датотеку

@@ -23,12 +23,12 @@ public final class LegDTO implements Serializable {
23 23
    * @param loadTime
24 24
    * @param unloadTime
25 25
    */
26
-  public LegDTO(final String voyageNumber, final String from, final String to, Date loadTime, Date unloadTime) {
26
+  public LegDTO(final String voyageNumber, final String from, final String to, final Date loadTime, final Date unloadTime) {
27 27
     this.voyageNumber = voyageNumber;
28 28
     this.from = from;
29 29
     this.to = to;
30
-    this.loadTime = loadTime;
31
-    this.unloadTime = unloadTime;
30
+    this.loadTime = new Date(loadTime.getTime());
31
+    this.unloadTime = new Date(unloadTime.getTime());
32 32
   }
33 33
 
34 34
   public String getVoyageNumber() {
@@ -44,11 +44,11 @@ public final class LegDTO implements Serializable {
44 44
   }
45 45
 
46 46
   public Date getLoadTime() {
47
-    return loadTime;
47
+    return new Date(loadTime.getTime());
48 48
   }
49 49
 
50 50
   public Date getUnloadTime() {
51
-    return unloadTime;
51
+    return new Date(unloadTime.getTime());
52 52
   }
53 53
 
54 54
 }

+ 2
- 1
dddsample/tracking/booking-api/src/main/java/se/citerus/dddsample/tracking/booking/api/RouteCandidateDTO.java Прегледај датотеку

@@ -1,6 +1,7 @@
1 1
 package se.citerus.dddsample.tracking.booking.api;
2 2
 
3 3
 import java.io.Serializable;
4
+import java.util.ArrayList;
4 5
 import java.util.Collections;
5 6
 import java.util.List;
6 7
 
@@ -17,7 +18,7 @@ public final class RouteCandidateDTO implements Serializable {
17 18
    * @param legs The legs for this itinerary.
18 19
    */
19 20
   public RouteCandidateDTO(final List<LegDTO> legs) {
20
-    this.legs = legs;
21
+    this.legs = new ArrayList<LegDTO>(legs);
21 22
   }
22 23
 
23 24
   /**