Refactoring del codice dell'applicazione di spedizione per utilizzare le fabbriche DDD

1

Stavo cercando di trovare esempi per l'utilizzo di fabbriche DDD e mi sono imbattuto nella domanda di spedizione del libro di Eric Evans.

Tuttavia, quando ho controllato il BookingService il codice per creare un Cargo ha avuto questo commento alla riga 37 :

34    public TrackingId bookNewCargo(final UnLocode originUnLocode,
35                                   final UnLocode destinationUnLocode,
36                                   final Date arrivalDeadline) {
37      // TODO modeling this as a cargo factory might be suitable
38      final TrackingId trackingId = cargoRepository.nextTrackingId();
39      final Location origin = locationRepository.find(originUnLocode);
40      final Location destination = locationRepository.find(destinationUnLocode);
41      final RouteSpecification routeSpecification = new RouteSpecification(origin, destination, arrivalDeadline);
42  
43      final Cargo cargo = new Cargo(trackingId, routeSpecification);
44  
45      cargoRepository.store(cargo);
46      logger.info("Booked new cargo with tracking id " + cargo.trackingId().idString());
47  
48      return cargo.trackingId();
49    }

Come dovrebbe essere utilizzata la fabbrica DDD qui? Quali parti devono essere refactored esattamente per utilizzare la fabbrica in questi pezzi di codice?

    
posta Songo 20.07.2013 - 01:10
fonte

1 risposta

1

Le righe da 38 a 43 potrebbero essere classificate come logica di dominio in quanto è così che si crea un carico valido. Dato che il servizio di prenotazione è un servizio applicativo, è necessario delegare al livello dominio per creare un carico. Forse il codice sarebbe così ...

37      // TODO modeling this as a cargo factory might be suitable
38      final TrackingId trackingId = cargoRepository.nextTrackingId();
39      final Location origin = locationRepository.find(originUnLocode);
40      final Location destination = locationRepository.find(destinationUnLocode);
42  
43      final Cargo cargo = CargoFactory.create(trackingId, origin, destination);

Guarda il mio libro gratuito su DDD link per maggiori informazioni sulle implementazioni di fabbrica.

    
risposta data 30.07.2013 - 00:12
fonte

Leggi altre domande sui tag