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
scroll top