DDD: Come mantenere un oggetto di valore complesso immutabile?
-
29-10-2019 - |
Domanda
Vorrei modellare un Address
come oggetto di valore. Dato che è una buona pratica renderlo immutabile, ho scelto di non fornire alcun setter, che potrebbe consentire di modificarlo in seguito.
Un approccio comune è passare i dati al costruttore; Tuttavia, quando l'oggetto valore è piuttosto grande, questo può diventare piuttosto gonfio:
class Address {
public function __construct(
Point $location,
$houseNumber,
$streetName,
$postcode,
$poBox,
$city,
$region,
$country) {
// ...
}
}
Un altro approccio dovrebbe essere quello di fornire gli argomenti come un array, risultando in un costruttore pulito, ma ciò potrebbe rovinare l'implementazione del costruttore:
class Address {
public function __construct(array $parts) {
if (! isset($parts['location']) || ! $location instanceof Point) {
throw new Exception('The location is required');
}
$this->location = $location;
// ...
if (isset($parts['poBox'])) {
$this->poBox = $parts['poBox'];
}
// ...
}
}
Mi sembra anche un po 'innaturale.
Qualche consiglio su come implementare correttamente un oggetto di valore piuttosto grande?
Nessuna soluzione corretta
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow