Pregunta

Me gustaría modelar un Address como un objeto de valor. Como es una buena práctica hacerlo inmutable, elegí no proporcionar ningún setter, que podría permitir modificarlo más tarde.

Un enfoque común es pasar los datos al constructor; Sin embargo, cuando el objeto de valor es bastante grande, eso puede estar bastante hinchado:

class Address {
    public function __construct(
        Point $location,
        $houseNumber,
        $streetName,
        $postcode,
        $poBox,
        $city,
        $region,
        $country) {
        // ...
    }
}

Otro enfoque debería ser proporcionar los argumentos como una matriz, lo que resulta en un constructor limpio, pero eso podría estropear la implementación del constructor:

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'];
        }
        // ...
    }
}

Eso también me parece un poco antinatural.

¿Algún consejo sobre cómo implementar correctamente un objeto de gran valor?

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top