Procházet zdrojové kódy

Purged last DTO from domain service layer, in preparation for a combination of dedicated remote facade with DTO assembly (booking application) and working directly against the domain service layer (tracking web interface).

peter_backlund před 18 roky
rodič
revize
b98d2a8022

+ 5
- 3
dddsample/src/main/java/se/citerus/dddsample/service/TrackingService.java Zobrazit soubor

@@ -1,7 +1,7 @@
1 1
 package se.citerus.dddsample.service;
2 2
 
3
+import se.citerus.dddsample.domain.Cargo;
3 4
 import se.citerus.dddsample.domain.TrackingId;
4
-import se.citerus.dddsample.service.dto.CargoTrackingDTO;
5 5
 
6 6
 /**
7 7
  * Cargo tracking service.
@@ -10,10 +10,12 @@ import se.citerus.dddsample.service.dto.CargoTrackingDTO;
10 10
 public interface TrackingService {
11 11
 
12 12
   /**
13
-   * @param trackingId tracking id
13
+   * Track a particular cargo.
14
+   *
15
+   * @param trackingId cargo tracking id
14 16
    * @return A cargo and its delivery history, or null if no cargo with given tracking id is found.
15 17
    */
16
-  CargoTrackingDTO track(TrackingId trackingId);
18
+  Cargo track(TrackingId trackingId);
17 19
 
18 20
   /**
19 21
    * Send relevant notifications to interested parties,

+ 2
- 9
dddsample/src/main/java/se/citerus/dddsample/service/TrackingServiceImpl.java Zobrazit soubor

@@ -7,8 +7,6 @@ import org.springframework.transaction.annotation.Transactional;
7 7
 import se.citerus.dddsample.domain.Cargo;
8 8
 import se.citerus.dddsample.domain.TrackingId;
9 9
 import se.citerus.dddsample.repository.CargoRepository;
10
-import se.citerus.dddsample.service.dto.CargoTrackingDTO;
11
-import se.citerus.dddsample.service.dto.assembler.CargoTrackingDTOAssembler;
12 10
 
13 11
 public class TrackingServiceImpl implements TrackingService {
14 12
 
@@ -17,15 +15,10 @@ public class TrackingServiceImpl implements TrackingService {
17 15
   private final Log logger = LogFactory.getLog(getClass());
18 16
 
19 17
   @Transactional(readOnly = true)
20
-  public CargoTrackingDTO track(final TrackingId trackingId) {
18
+  public Cargo track(final TrackingId trackingId) {
21 19
     Validate.notNull(trackingId);
22 20
 
23
-    final Cargo cargo = cargoRepository.find(trackingId);
24
-    if (cargo == null) {
25
-      return null;
26
-    }
27
-
28
-    return new CargoTrackingDTOAssembler().toDTO(cargo);
21
+    return cargoRepository.find(trackingId);
29 22
   }
30 23
 
31 24
   @Transactional(readOnly = true)

+ 5
- 2
dddsample/src/main/java/se/citerus/dddsample/web/CargoTrackingController.java Zobrazit soubor

@@ -3,9 +3,11 @@ package se.citerus.dddsample.web;
3 3
 import org.springframework.validation.BindException;
4 4
 import org.springframework.web.servlet.ModelAndView;
5 5
 import org.springframework.web.servlet.mvc.SimpleFormController;
6
+import se.citerus.dddsample.domain.Cargo;
6 7
 import se.citerus.dddsample.domain.TrackingId;
7 8
 import se.citerus.dddsample.service.TrackingService;
8 9
 import se.citerus.dddsample.service.dto.CargoTrackingDTO;
10
+import se.citerus.dddsample.service.dto.assembler.CargoTrackingDTOAssembler;
9 11
 import se.citerus.dddsample.web.command.TrackCommand;
10 12
 
11 13
 import javax.servlet.http.HttpServletRequest;
@@ -33,11 +35,12 @@ public final class CargoTrackingController extends SimpleFormController {
33 35
 
34 36
     final TrackCommand trackCommand = (TrackCommand) command;
35 37
     final String tidStr = trackCommand.getTrackingId();
36
-    final CargoTrackingDTO cargo = trackingService.track(new TrackingId(tidStr));
38
+    final Cargo cargo = trackingService.track(new TrackingId(tidStr));
37 39
 
38 40
     final Map<String, CargoTrackingDTO> model = new HashMap<String, CargoTrackingDTO>();
39 41
     if (cargo != null) {
40
-      model.put("cargo", cargo);
42
+      final CargoTrackingDTO dto = new CargoTrackingDTOAssembler().toDTO(cargo);
43
+      model.put("cargo", dto);
41 44
     } else {
42 45
       errors.rejectValue("trackingId", "cargo.unknown_id", new Object[]{trackCommand.getTrackingId()},
43 46
         "Unknown tracking id");

+ 11
- 26
dddsample/src/test/java/se/citerus/dddsample/service/TrackingServiceTest.java Zobrazit soubor

@@ -6,8 +6,6 @@ import se.citerus.dddsample.domain.*;
6 6
 import static se.citerus.dddsample.domain.SampleLocations.CHICAGO;
7 7
 import static se.citerus.dddsample.domain.SampleLocations.STOCKHOLM;
8 8
 import se.citerus.dddsample.repository.CargoRepository;
9
-import se.citerus.dddsample.service.dto.CargoTrackingDTO;
10
-import se.citerus.dddsample.service.dto.HandlingEventDTO;
11 9
 
12 10
 import java.util.Arrays;
13 11
 import java.util.Date;
@@ -43,37 +41,24 @@ public class TrackingServiceTest extends TestCase {
43 41
 
44 42
 
45 43
     // Tested call
46
-    CargoTrackingDTO cargoDTO = cargoService.track(new TrackingId("XYZ"));
44
+    Cargo trackedCargo = cargoService.track(new TrackingId("XYZ"));
47 45
 
46
+    assertEquals(cargo, trackedCargo);
48 47
 
49
-    assertEquals("XYZ", cargoDTO.getTrackingId());
50
-    assertEquals("SESTO (Stockholm)", cargoDTO.getOrigin());
51
-    assertEquals("USCHI (Chicago)", cargoDTO.getFinalDestination());
52
-    assertEquals("USCHI", cargoDTO.getCurrentLocationId());
53
-
54
-    List<HandlingEventDTO> events = cargoDTO.getEvents();
48
+    List<HandlingEvent> events = trackedCargo.deliveryHistory().eventsOrderedByCompletionTime();
55 49
     assertEquals(3, events.size());
56 50
 
57 51
     // Claim happened first
58
-    HandlingEventDTO eventDTO = events.get(0);
59
-    assertEquals("SESTO (Stockholm)", eventDTO.getLocation());
60
-    assertEquals("CLAIM", eventDTO.getType());
61
-    assertEquals("", eventDTO.getCarrier());
62
-    assertEquals(new Date(10), eventDTO.getTime());
52
+    HandlingEvent handlingEvent = events.get(0);
53
+    assertEquals(claimed, handlingEvent);
63 54
 
64 55
     // Then load
65
-    eventDTO = events.get(1);
66
-    assertEquals("SESTO (Stockholm)", eventDTO.getLocation());
67
-    assertEquals("LOAD", eventDTO.getType());
68
-    assertEquals("CAR_001", eventDTO.getCarrier());
69
-    assertEquals(new Date(12), eventDTO.getTime());
56
+    handlingEvent = events.get(1);
57
+    assertEquals(loaded, handlingEvent);
70 58
 
71 59
     // Finally unload
72
-    eventDTO = events.get(2);
73
-    assertEquals("USCHI (Chicago)", eventDTO.getLocation());
74
-    assertEquals("UNLOAD", eventDTO.getType());
75
-    assertEquals("CAR_001", eventDTO.getCarrier());
76
-    assertEquals(new Date(100), eventDTO.getTime());
60
+    handlingEvent = events.get(2);
61
+    assertEquals(unloaded, handlingEvent);
77 62
   }
78 63
 
79 64
   public void testTrackNullResult() {
@@ -81,9 +66,9 @@ public class TrackingServiceTest extends TestCase {
81 66
     replay(cargoRepository);
82 67
 
83 68
     // Tested call
84
-    CargoTrackingDTO cargoDTO = cargoService.track(new TrackingId("XYZ"));
69
+    Cargo cargo = cargoService.track(new TrackingId("XYZ"));
85 70
     
86
-    assertNull(cargoDTO);
71
+    assertNull(cargo);
87 72
   }
88 73
 
89 74
   protected void onTearDown() throws Exception {

+ 8
- 19
dddsample/src/test/java/se/citerus/dddsample/web/CargoTrackingControllerTest.java Zobrazit soubor

@@ -10,15 +10,16 @@ import org.springframework.validation.Errors;
10 10
 import org.springframework.validation.FieldError;
11 11
 import org.springframework.web.servlet.ModelAndView;
12 12
 import se.citerus.dddsample.domain.Cargo;
13
+import se.citerus.dddsample.domain.DeliveryHistory;
13 14
 import se.citerus.dddsample.domain.HandlingEvent;
14 15
 import static se.citerus.dddsample.domain.SampleLocations.HONGKONG;
15 16
 import static se.citerus.dddsample.domain.SampleLocations.TOKYO;
16
-import se.citerus.dddsample.domain.StatusCode;
17 17
 import se.citerus.dddsample.domain.TrackingId;
18 18
 import se.citerus.dddsample.service.TrackingService;
19 19
 import se.citerus.dddsample.service.dto.CargoTrackingDTO;
20 20
 import se.citerus.dddsample.web.command.TrackCommand;
21 21
 
22
+import java.util.Arrays;
22 23
 import java.util.Date;
23 24
 
24 25
 public class CargoTrackingControllerTest extends TestCase {
@@ -44,24 +45,12 @@ public class CargoTrackingControllerTest extends TestCase {
44 45
   private TrackingService getCargoServiceMock() {
45 46
     return new EmptyStubTrackingService() {
46 47
 
47
-      public CargoTrackingDTO track(TrackingId trackingId) {
48
+      public Cargo track(TrackingId trackingId) {
48 49
         final Cargo cargo = new Cargo(trackingId, HONGKONG, TOKYO);
49 50
         final HandlingEvent event = new HandlingEvent(cargo, new Date(10L), new Date(20L), HandlingEvent.Type.RECEIVE, HONGKONG, null);
50
-
51
-        final CargoTrackingDTO cargoDTO = new CargoTrackingDTO(
52
-          cargo.trackingId().idString(),
53
-          cargo.origin().unLocode().idString(),
54
-          cargo.destination().unLocode().idString(),
55
-          StatusCode.CLAIMED,
56
-          "AAAAA",
57
-          "BALO",
58
-          false);
59
-        cargoDTO.addEvent(event.location().unLocode().idString(),
60
-          event.type().toString(),
61
-          null,
62
-          event.completionTime(),
63
-          true);
64
-        return cargoDTO;
51
+        cargo.setDeliveryHistory(new DeliveryHistory(Arrays.asList(event)));
52
+        
53
+        return cargo;
65 54
       }
66 55
     };
67 56
   }
@@ -92,7 +81,7 @@ public class CargoTrackingControllerTest extends TestCase {
92 81
     // Errors, command are two standard map attributes, the third should be the cargo object
93 82
     assertEquals(3, mav.getModel().size());
94 83
     CargoTrackingDTO cargo = (CargoTrackingDTO) mav.getModel().get("cargo");
95
-    assertEquals("AAAAA", cargo.getCurrentLocationId());
84
+    assertEquals("CNHKG", cargo.getCurrentLocationId());
96 85
   }
97 86
 
98 87
   public void testUnknownCargo() throws Exception {
@@ -116,7 +105,7 @@ public class CargoTrackingControllerTest extends TestCase {
116 105
   }
117 106
 
118 107
   private class EmptyStubTrackingService implements TrackingService {
119
-    public CargoTrackingDTO track(TrackingId trackingId) {
108
+    public Cargo track(TrackingId trackingId) {
120 109
       return null;
121 110
     }
122 111
     public void notify(TrackingId trackingId) {