Nella pagina 382 di questo libro c'è un passaggio che parla dell'uso di oggetti valore negli aggregati, sotto la radice (entità). Esiste un esempio di Product
che, oltre ad altri valori, contiene un Set<ProductBacklogItem>
- raccolta di entità .
Ora, Vernon prova a spiegare perché ProductBacklogItem
è un'entità e non un oggetto valore:
There are good reasons why ProductBacklogItem is modeled as an Entity rather than a Value. As discussed in Value Objects (6), since the backing database is used via Hibernate, it must model collections of Values as database entities. Reordering any one of the elements could cause a significant number, even all, of the ProductBacklogItem instances to be deleted and replaced. That would tend to cause significant overhead in the infrastructure. As an Entity, it allows the ordering attribute to be changed across any and all collection elements as often as a product owner requires. However, if we were to switch from using Hibernate with MySQL to a key-value store, we could easily change ProductBacklogItem to be a Value type instead. When using a key- value or document store, Aggregate instances are typically serialized as one value representation for storage.
Non capisco perché l'implementazione del repository determini se qualche modello sta per essere un'entità o un oggetto valore? Se andiamo all'archivio dei valori-chiave, potremmo avere ancora ordini di cui sta parlando.
Pensi che abbia senso?