私は「すべての」クラスの依存関係を読んで依存性の注入について学んを注入する必要があります(今のところのインターフェイスを無視してみましょう)クラス内の値オブジェクト内での処理方法
最近値オブジェクトの代わりに、(レポさんなど以内)准アレイ、私が読んでいるほとんどのチュートリアルを使用してにシフトクラスメソッド内の値オブジェクトをインスタンス化する(依存性注入なし)これは値オブジェクトにとって大したことではありませんが、なぜこのパスが選択されたのか、リポジトリに依存性注入が行われ、
私はマイクロを最適化しようとしているわけではなく、主にベストプラクティスを習得して学んでいます。
私が考えているのは、値のオブジェクトデータのコンストラクタインジェクションだけですが、クローン作成後にコンストラクタを呼び出すことができないのでしょうか?
例:
class Repo {
public function getUser() {
return new UserValueObject($userDataProvidedByDB);
}
}
VS
class Repo {
public function __construct(UserValueObject $user) {
$this->user = $user;
}
public function getUser() {
return (clone $this->user)->__construct($userDataProvidedByDB);
}
}
値オブジェクトには、アプリケーションの残りの部分が使用するプロパティ(可能なコンストラクタ、ゲッター、セッターを除く)のみが含まれている必要があります。別の値オブジェクトに異なるプロパティセットを注入すると、アプリケーションはいずれかの方法で失敗する可能性が高くなります。 –
空のユーザー '値オブジェクト'/'エンティティ'にはdbのデータが入力され、repoによって返されます。レポを作成するときに、 'User'クラスのクリーンなインスタンスが注入されるので、各クローンはレポ内でインスタンス化されているかのように空になります。ここでの本当の違いは、レポコンストラクタにクリーンなエンティティを注入することだけです。 (私が間違っていない限り) – ICJ
それを分解しましょう。 ** 1。**レポは、常に同じプロパティセットを持つオブジェクトを返す必要があるため、アプリケーションの残りの部分にはその内容が分かります。 ** 2。**値オブジェクトにはビジネスロジックが含まれていません。値オブジェクトはそのプロパティに値を格納するだけです(少なくとも必要があります)。 **結論**、値オブジェクトを嘲笑/変更する(別の値オブジェクトをコンストラクタに送る)ことは、値オブジェクトを使用するすべてのコードを変更する必要があることを意味します(ただし、なぜそれを変更するのですか?)新しいプロパティを使用すると、DIはその目的を失いました –