Closed tonkat-prtq closed 2 years ago
まさにそういうことです。 今回は、Userの"一番最初の登録"がとても複雑な処理が多くなっており、 その部分がUserクラスの責任範囲を大きく逸脱するという判断のもと、 コンストラクタでその処理をやるわけではなく、 Factoryクラスにその処理を任せたということになります。
つまり、下記のようにそれぞれの責任範囲を分けたということです。 ・1回目のユーザー登録はUseFactory.create()を使う。 ・それ以降でUserインスタンスを作成する(厳密いうと既にあるユーザー情報を参照して、Userインスタンスを作成する)場合にはコンストラクタを使う
ここで、ユーザーの名前だけで呼び出せるコンストラクタを”消した”ということが結構大事です。 このコンストラクタが残っていると、ユーザーインスタンスを使おうとしたときに下記のように見えます。 ・ユーザーのインスタンスを作成する方法は二つ ・Factoryがあるから、そっちで新規作成は行うっぽいし、ユーザー名から既存のユーザーを参照できるのかな? ・逆にIDだけでの検索はできないのか、妙だな。
コンストラクタがあることによって妙な疑問を抱かせてしまうということですね。
それ以降でUserインスタンスを作成する(厳密いうと既にあるユーザー情報を参照して、Userインスタンスを作成する)場合にはコンストラクタを使う
なるほど!ここまで追えてませんでした。だからコンストラクタの中身がthis.id = idというような表記のみだったのですね。
ここで、ユーザーの名前だけで呼び出せるコンストラクタを”消した”ということが結構大事です。
これが責任範囲を明確にするということなんでしょうか! とても分かりやすく納得できました!ありがとうございます!
ボトムアップドメイン駆動設計 後編 ファクトリを利用した採番
Userクラスのコンストラクタ内にファクトリ
UserFactory
を呼び出したりするような記述が全くなく、どこで使っているのか混乱しました。アプリケーションサービス
UserApplicationService
で、ファクトリUserFactory
のcreateメソッドを使うことでUserのインスタンスを生成してるということでしょうか? (なので、ファクトリを実装した場合はnew User
のような生成方法を取らずに、userFactory.create
でUserインスタンスを生成する)