Я хотел бы моделировать адрес
в качестве объекта значения. Поскольку это хорошая практика, чтобы сделать это неизменным, я решил не предоставить какой-либо установку, что может позволить изменять его позже.
Общий подход - передавать данные в конструктор; Однако, когда объект стоимости довольно большой, то это может стать довольно раздутым:
class Address {
public function __construct(
Point $location,
$houseNumber,
$streetName,
$postcode,
$poBox,
$city,
$region,
$country) {
// ...
}
}
Другой подход, который могло бы предоставить аргументы в качестве массива, что приводит к чистому конструктору, но это может испортить реализацию конструктора:
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'];
}
// ...
}
}
Это также выглядит немного неестественно для меня.
Любой совет о том, как правильно реализовать привлекательный объект большого значения?