Address
を値オブジェクトとしてモデル化したいと思います。不変にするのは良い習慣なので、後で変更できる可能性のあるセッターを提供しないことにしました。
一般的なアプローチは、データをコンストラクターに渡すことです。ただし、値オブジェクトがかなり大きい場合、それはかなり肥大化する可能性があります。
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'];
}
// ...
}
}
それも私には少し不自然に見えます。
かなり大きな値のオブジェクトを正しく実装する方法について何かアドバイスはありますか?