質問

モデルにしたいのですが 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'];
        }
        // ...
    }
}

それは私にも少し不自然に見えます。

かなり大きな価値オブジェクトを正しく実装する方法に関するアドバイスはありますか?

正しい解決策はありません

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top