Gestire oggetti di valore complessi

0

Sto lavorando con la definizione di Martin Fowler come base di lavoro.

Ho una classe chiamata Condition che sto riscontrando problemi nella corretta classificazione.

Ciò che mi fa pensare che questo potrebbe essere un oggetto valore:

  1. Un dato Condition è valido solo all'interno di un contesto di una singola entità; conditions non sono mai condivisi, né indirizzati indipendentemente.

  2. La sua uguaglianza è basata sui suoi valori; cioè, una singola entità non dovrebbe avere più dello stesso condition

  3. Non vengono mai modificati, solo aggiunti o rimossi da una determinata entità.

Tuttavia, presentano alcune caratteristiche non tipiche degli oggetti valore:

  1. Logica e comportamento molto complessi.

  2. Potenzialmente, i riferimenti alle entità di prima classe costituiscono i suoi valori.

Devo considerare la mia classe Condition come un'entità o un valore?

Se lo considero un oggetto valore, è giustificato posizionare il suo codice di accesso ai dati con il codice di accesso ai dati dell'oggetto genitore ( ParentEntityRepository )? Come dovrei affrontare questa classe in modo diverso se si tratta di un oggetto valore?

    
posta TheCatWhisperer 11.05.2018 - 21:09
fonte

1 risposta

1

In base alla descrizione e alla risposta che hai dato nei commenti, mi sembra che la condizione non sia un oggetto valore in sé ma che uno dei suoi componenti sia un oggetto valore.

Considererei solo un oggetto valore appropriato se tutto lo stato di esso viene valutato nel determinare se due istanze sono uguali. Direi anche che (ad esempio in Java) non dovresti definire un equals o hashcode per un oggetto a meno che non sia immutabile e ogni pezzo di stato sia usato come parte dell'implementazione. In base a questa regola, qualsiasi oggetto che ha eguagliato il valore è un oggetto valore.

Se questo funziona per la tua situazione, si apre la possibilità di utilizzare pesi volanti per questi oggetti valore all'interno di condition oggetti.

    
risposta data 11.05.2018 - 22:48
fonte