La posizione non dovrebbe essere un oggetto valore?

2

Il libro DDD di Eric Evan, Esempio di spedizione cargo, pag. 168:

Location

Two places with the same name are not the same. Latitude and longitude could provide a unique key, but probably not a very practical one, since those measurements are not of interest to most purposes of this system and they would be fairly complicated. More likely, the Location will be part of a geographical model of some kind that will relate places according to shipping lanes and other domain-specific concerns. So an arbitrary, internal, automatically generated identifier will suffice.

Motivo per cui l'autore ha creato Location un'entità perché due luoghi diversi potrebbero avere lo stesso nome. Ma poiché sembra che Location sia immutabile e quindi non cambierà nel tempo, non sarebbe meglio se fosse invece un Oggetto Valore? Così:

a) Perché non potremmo (invece dell'identificatore generato automaticamente) introdurre un attributo aggiuntivo che descriva un vero carattere descrittivo di una posizione, che aiuterebbe a distinguere tra i due luoghi con lo stesso nome? Quindi potremmo rendere Location un VO.

b) Anche se non introduciamo un attributo aggiuntivo che descrive una caratteristica reale di un luogo, ma usiamo un identificatore generato automaticamente, non potremmo ancora considerare Location come un VO, poiché il fatto rimane che è immutable e che l'applicazione funzionerebbe allo stesso modo anche se monitorasse diverse istanze che rappresentano lo stesso Location ?

c) Dalla citazione sembra che l'autore possa designare Location come entità anche se al posto dell'identificatore generato automaticamente useremmo latitudine e longitudine per aiutare a distinguere tra luoghi diversi. Perché?

Grazie

    
posta EdvRusj 21.05.2013 - 18:49
fonte

2 risposte

2

Credo che la premessa fondamentale per cui location sia immutabile è errata ed è questo che appende la tua analisi.

Location è qualsiasi cosa ma immutabile tranne che per punti storici fissi nel tempo. Un buon design incapsula le aree che possono cambiare, quindi posso vedere dove location dovrebbe essere la propria entità invece di un valore semplice.

Seguendo il dominio del container cargo, diamo un'occhiata ad alcuni esempi per mostrare come location sia molto mutevole.

  • Mittente La compagnia di navigazione avrà generalmente una sede fissa per un periodo di tempo, ma le aziende possono e devono spostare la loro posizione. Le dimensioni relative di ciò che spediscono rappresentano il più grande ostacolo qui per lo spostamento del business. Ma un'azienda che si occupa di piccoli beni con un inventario basso può facilmente saltare da un magazzino all'altro.
  • Container di spedizione Per definizione del dominio, il contenitore di spedizione si sposterà da una posizione all'altra. Dalla struttura di origine al transito verso la società di ricezione, la posizione del contenitore è volatile.
  • Le merci spedite presentano una sfida simile al contenitore, ma il contenitore conterrà probabilmente una quantità di N di merci spedite. Mentre è possibile assegnare la posizione del contenitore alle merci, ha più senso indicare che le merci si trovano all'interno di un contenitore. Usando un meccanismo basato sul valore solo qui creeremo un codice contorto per tracciare il location delle merci.
  • Il destinatario ha sfide simili a quelle della compagnia di navigazione. Un'altra considerazione riguarda la localizzazione di beni in una grande proprietà? I beni di grandi dimensioni immagazzinati in lotti tremendamente grandi vengono spesso spostati per supportare le richieste in entrata e in uscita. Allo stesso modo, con piccoli beni si possono avere diverse categorie di piccoli beni collocati su uno scaffale. Usando un valore fisso, come si differenziano quali beni si trovano sullo scaffale più alto rispetto a quello inferiore? L'altitudine GPS + non è sufficientemente precisa per specificare questo tipo di location . Si noti inoltre che ho creato un'entità di fatto con la mia "soluzione" di combinazione di GPS e amp; altitudine.

Per riassumere:

  • Il valore location scelto potrebbe non essere sufficientemente preciso per identificare e isolare due oggetti vicini l'uno all'altro.
  • Location è mutabile, cambierà nel tempo.

Quindi contrastiamo location con address .

Un indirizzo è immutabile in quanto appartiene a uno spazio geografico fisso e ha un grado implicito di precisione (che può essere o non essere sufficiente). Address è una proprietà di una sezione di beni immobili. Nell'esempio estremo e un po 'assurdo di spostare un edificio (pensate a grandi gru e rimorchi a pianale pesante) in un'altra posizione, gli indirizzi coinvolti non sono cambiati. L'edificio non porta il suo vecchio indirizzo con esso in un nuovo sito immobiliare, piuttosto l'edificio è dato l'indirizzo del nuovo sito immobiliare. Qualunque cosa sia costruita nel vecchio sito immobiliare riceve il vecchio indirizzo per la sua identificazione.

Parte della sfida qui sono le connotazioni linguistiche di address e location. Molte volte possono essere usate come sinonimi, ma in alcuni casi non possono assolutamente.

  • Un house ha un address che è anche un location che è per la maggior parte degli intenti e degli scopi riparati. Potresti dire "la posizione della casa" e la maggior parte dedurrebbe che tu intendessi l'indirizzo.
  • Un lettore mp3 ha un location che può corrispondere a address ma non vi è alcuna implicazione di essere fisso o immutabile. Puoi prendere un lettore mp3 e camminare nella porta accanto, quindi cambiare la posizione e quindi l'indirizzo. Non si può dire "l'indirizzo del lettore mp3" perché è semplicemente privo di senso a causa delle implicite implicazioni del termine.

Quando usare address contro location dipende dalla stabilità dell'oggetto a cui ti riferisci. Un business in generale è descritto come avente un address ma in realtà è un location dal momento che può e cambia. Beni e contenitori hanno locations in quanto sono inclini a spostarsi.

    
risposta data 22.05.2013 - 15:35
fonte
0

La caratteristica più significativa tra un'entità e un oggetto valore non è se è immutabile o no. Dovresti guardare all'identità del concetto. Una location è una location nonostante il suo cambio di nome? Sì.

Ad esempio, hai una gamba che termina a Taunton, in Inghilterra. Nel tuo sistema c'è un oggetto con la descrizione "Taunton, Inghilterra" e il paese Inghilterra. Nel frattempo il villaggio di Taunton dichiara la sua indipendenza dall'Inghilterra e ora si chiama Nuevo Toledo. Nel tuo sistema la descrizione è "Nuevo Toledo" e il paese è Nuevo Toledo. La posizione è la stessa di prima? Sì, devi ancora lasciare Londra con l'M-4 e guidare per 40 miglia.

La posizione ha un'identità che supera le modifiche che ha. Il valore dei suoi attributi non rende la sua identità. Quindi è un'entità.

Puoi anche avere oggetti valore che non sono immutabili.

    
risposta data 12.04.2018 - 16:33
fonte

Leggi altre domande sui tag