Pārlūkot izejas kodu

Removed all persistent fields from Projections, making all calculations "live". This made it possible to make all class methods static, but I'm not really sure that's a good idea. Revisit.

peter_backlund 17 gadus atpakaļ
vecāks
revīzija
280bd0f5c6

+ 2
- 9
dddsample/tracking/core/src/main/java/se/citerus/dddsample/tracking/core/domain/model/cargo/Cargo.java Parādīt failu

@@ -51,7 +51,6 @@ public class Cargo extends EntitySupport<Cargo,TrackingId> {
51 51
   private RouteSpecification routeSpecification;
52 52
   private Itinerary itinerary;
53 53
   private Delivery delivery;
54
-  private Projections projections;
55 54
 
56 55
   public Cargo(final TrackingId trackingId, final RouteSpecification routeSpecification) {
57 56
     Validate.notNull(trackingId, "Tracking ID is required");
@@ -60,7 +59,6 @@ public class Cargo extends EntitySupport<Cargo,TrackingId> {
60 59
     this.trackingId = trackingId;
61 60
     this.routeSpecification = routeSpecification;
62 61
     this.delivery = Delivery.initial();
63
-    this.projections = new Projections(delivery, itinerary, routeSpecification);
64 62
   }
65 63
 
66 64
   @Override
@@ -95,14 +93,14 @@ public class Cargo extends EntitySupport<Cargo,TrackingId> {
95 93
    * @return Estimated time of arrival.
96 94
    */
97 95
   public Date estimatedTimeOfArrival() {
98
-    return projections.estimatedTimeOfArrival();
96
+    return Projections.estimatedTimeOfArrival(delivery, itinerary, routeSpecification);
99 97
   }
100 98
 
101 99
   /**
102 100
    * @return Next expected activity.
103 101
    */
104 102
   public HandlingActivity nextExpectedActivity() {
105
-    return projections.nextExpectedActivity();
103
+    return Projections.nextExpectedActivity(delivery, itinerary, routeSpecification);
106 104
   }
107 105
 
108 106
   /**
@@ -149,8 +147,6 @@ public class Cargo extends EntitySupport<Cargo,TrackingId> {
149 147
     Validate.notNull(routeSpecification, "Route specification is required");
150 148
 
151 149
     this.routeSpecification = routeSpecification;
152
-    // Handling consistency within the Cargo aggregate synchronously
153
-    this.projections = new Projections(delivery, itinerary, routeSpecification);
154 150
   }
155 151
 
156 152
   /**
@@ -162,8 +158,6 @@ public class Cargo extends EntitySupport<Cargo,TrackingId> {
162 158
     Validate.notNull(itinerary, "Itinerary is required");
163 159
 
164 160
     this.itinerary = itinerary;
165
-    // Handling consistency within the Cargo aggregate synchronously
166
-    this.projections = new Projections(delivery, itinerary, routeSpecification);
167 161
   }
168 162
 
169 163
   /**
@@ -208,7 +202,6 @@ public class Cargo extends EntitySupport<Cargo,TrackingId> {
208 202
 
209 203
     // Delivery and Projections are value object, so they are replaced with new or derived ones
210 204
     this.delivery = Delivery.whenHandled(handlingActivity);
211
-    this.projections = new Projections(delivery, itinerary, routeSpecification);
212 205
   }
213 206
 
214 207
   @Override

+ 14
- 36
dddsample/tracking/core/src/main/java/se/citerus/dddsample/tracking/core/domain/model/cargo/Projections.java Parādīt failu

@@ -16,45 +16,30 @@ import java.util.Iterator;
16 16
  */
17 17
 class Projections extends ValueObjectSupport<Projections> {
18 18
 
19
-  private final Date estimatedTimeOfArrival;
20
-  private final HandlingActivity nextExpectedActivity;
21
-
22 19
   private static final Date ETA_UNKOWN = null;
23 20
   private static final HandlingActivity NO_ACTIVITY = null;
24 21
 
25
-  Projections(final Delivery delivery, final Itinerary itinerary, final RouteSpecification routeSpecification) {
26
-    this.estimatedTimeOfArrival = calculateEstimatedTimeOfArrival(delivery, itinerary, routeSpecification);
27
-    this.nextExpectedActivity = calculateNextExpectedActivity(delivery, itinerary, routeSpecification);
28
-  }
29
-
30 22
   /**
23
+   * @param delivery delivery
24
+   * @param itinerary itinerary
25
+   * @param routeSpecification routeSpecification
31 26
    * @return Estimated time of arrival, or null if not known.
32 27
    */
33
-  Date estimatedTimeOfArrival() {
34
-    if (estimatedTimeOfArrival != ETA_UNKOWN) {
35
-      return new Date(estimatedTimeOfArrival.getTime());
28
+  static Date estimatedTimeOfArrival(final Delivery delivery, final Itinerary itinerary, final RouteSpecification routeSpecification) {
29
+    if (delivery.onTrack(itinerary, routeSpecification)) {
30
+      return new Date(itinerary.finalUnloadTime().getTime());
36 31
     } else {
37 32
       return ETA_UNKOWN;
38 33
     }
39 34
   }
40 35
 
41 36
   /**
37
+   * @param delivery delivery
38
+   * @param itinerary itinerary
39
+   * @param routeSpecification routeSpecification 
42 40
    * @return The next expected handling activity.
43 41
    */
44
-  HandlingActivity nextExpectedActivity() {
45
-    return nextExpectedActivity;
46
-  }
47
-
48
-  private Date calculateEstimatedTimeOfArrival(final Delivery delivery, final Itinerary itinerary, final RouteSpecification routeSpecification) {
49
-    if (delivery.onTrack(itinerary, routeSpecification)) {
50
-      return itinerary.finalUnloadTime();
51
-    } else {
52
-      return ETA_UNKOWN;
53
-    }
54
-  }
55
-
56
-  private HandlingActivity calculateNextExpectedActivity(final Delivery delivery, final Itinerary itinerary, final RouteSpecification routeSpecification) {
57
-
42
+  static HandlingActivity nextExpectedActivity(final Delivery delivery, final Itinerary itinerary, final RouteSpecification routeSpecification) {
58 43
     /*
59 44
      TODO Capture:
60 45
 
@@ -91,27 +76,22 @@ class Projections extends ValueObjectSupport<Projections> {
91 76
     }
92 77
   }
93 78
 
94
-  private HandlingActivity receiveInFirstLocation(final Itinerary itinerary) {
79
+  private static HandlingActivity receiveInFirstLocation(final Itinerary itinerary) {
95 80
     final Leg leg = itinerary.firstLeg();
96 81
     return new HandlingActivity(RECEIVE, leg.loadLocation());
97 82
   }
98 83
 
99
-  private HandlingActivity loadInFirstLocation(final Itinerary itinerary) {
84
+  private static HandlingActivity loadInFirstLocation(final Itinerary itinerary) {
100 85
     final Leg leg = itinerary.firstLeg();
101 86
     return new HandlingActivity(LOAD, leg.loadLocation(), leg.voyage());
102 87
   }
103 88
 
104
-  private HandlingActivity loadOrClaimInNextLocation(final Itinerary itinerary, final Location activityLocation) {
89
+  private static HandlingActivity loadOrClaimInNextLocation(final Itinerary itinerary, final Location activityLocation) {
105 90
     for (final Iterator<Leg> it = itinerary.legs().iterator(); it.hasNext();) {
106 91
       final Leg leg = it.next();
107 92
       if (leg.unloadLocation().sameAs(activityLocation)) {
108 93
         if (it.hasNext()) {
109 94
           final Leg nextLeg = it.next();
110
-
111
-          //return leg.loadActivity(); { return new HandlingActivity(voyage, loadLocation); }
112
-
113
-          //return HandlingActivity.loadOnto(nextLeg.voyage()).in(nextLeg.loadLocation());
114
-
115 95
           return new HandlingActivity(LOAD, nextLeg.loadLocation(), nextLeg.voyage());
116 96
         } else {
117 97
           return new HandlingActivity(CLAIM, leg.unloadLocation());
@@ -122,7 +102,7 @@ class Projections extends ValueObjectSupport<Projections> {
122 102
     return NO_ACTIVITY;
123 103
   }
124 104
 
125
-  private HandlingActivity unloadInNextLocation(final Itinerary itinerary, final Location activityLocation) {
105
+  private static HandlingActivity unloadInNextLocation(final Itinerary itinerary, final Location activityLocation) {
126 106
     for (final Leg leg : itinerary.legs()) {
127 107
       if (leg.loadLocation().sameAs(activityLocation)) {
128 108
         return new HandlingActivity(UNLOAD, leg.unloadLocation(), leg.voyage());
@@ -134,8 +114,6 @@ class Projections extends ValueObjectSupport<Projections> {
134 114
 
135 115
   Projections() {
136 116
     // Needed by Hibernate
137
-    estimatedTimeOfArrival = null;
138
-    nextExpectedActivity = null;
139 117
   }
140 118
 
141 119
 }