Come dovrebbe sembrare la firma del metodo di aggiornamento nella radice aggregata? Ad esempio, ho bisogno di aggiornare l'indirizzo dell'utente. Ho diversi modi per farlo e non so quale sia il migliore ("domain driven design way"). Il primo modo è creare un metodo in User che ottenga UserAddress come argomento:
public void updateAddress(UserAddress address) {
// update logic
}
Ma in questo caso i componenti esterni che utilizzano User.updateAddress (indirizzo UserAddress), conoscono la rappresentazione interna dell'indirizzo dell'utente.
L'altro modo è creare metodi con molti argomenti:
public void updateAddress(String city, String street, String country) {
//update logic
}
Oppure posso creare qualche oggetto valore:
public void updateAddress(AddressDTO addressDto) {
// update logic
}
Qual è il modo migliore?
public class User {
private Long id;
private List<UserAddress> addresses;
// other fields and methods
}
public class UserAddress {
private Long id;
private String type;
private Boolean isMain;
private Address address;
public void update(Address address, Boolean isMain) {}
}
public class Address {
// fields like city, street etc
}