tonkat-prtq / java-bingo-app

0 stars 0 forks source link

ファクトリを呼び出している場所 #8

Closed tonkat-prtq closed 2 years ago

tonkat-prtq commented 2 years ago

ボトムアップドメイン駆動設計 後編 ファクトリを利用した採番

Userクラスのコンストラクタ内にファクトリ UserFactory を呼び出したりするような記述が全くなく、どこで使っているのか混乱しました。

アプリケーションサービス UserApplicationServiceで、ファクトリ UserFactoryのcreateメソッドを使うことでUserのインスタンスを生成してるということでしょうか? (なので、ファクトリを実装した場合はnew Userのような生成方法を取らずに、userFactory.createでUserインスタンスを生成する)

nega321345 commented 2 years ago

まさにそういうことです。 今回は、Userの"一番最初の登録"がとても複雑な処理が多くなっており、 その部分がUserクラスの責任範囲を大きく逸脱するという判断のもと、 コンストラクタでその処理をやるわけではなく、 Factoryクラスにその処理を任せたということになります。

つまり、下記のようにそれぞれの責任範囲を分けたということです。 ・1回目のユーザー登録はUseFactory.create()を使う。 ・それ以降でUserインスタンスを作成する(厳密いうと既にあるユーザー情報を参照して、Userインスタンスを作成する)場合にはコンストラクタを使う

ここで、ユーザーの名前だけで呼び出せるコンストラクタを”消した”ということが結構大事です。 このコンストラクタが残っていると、ユーザーインスタンスを使おうとしたときに下記のように見えます。 ・ユーザーのインスタンスを作成する方法は二つ ・Factoryがあるから、そっちで新規作成は行うっぽいし、ユーザー名から既存のユーザーを参照できるのかな? ・逆にIDだけでの検索はできないのか、妙だな。

コンストラクタがあることによって妙な疑問を抱かせてしまうということですね。

tonkat-prtq commented 2 years ago

それ以降でUserインスタンスを作成する(厳密いうと既にあるユーザー情報を参照して、Userインスタンスを作成する)場合にはコンストラクタを使う

なるほど!ここまで追えてませんでした。だからコンストラクタの中身がthis.id = idというような表記のみだったのですね。

ここで、ユーザーの名前だけで呼び出せるコンストラクタを”消した”ということが結構大事です。

これが責任範囲を明確にするということなんでしょうか! とても分かりやすく納得できました!ありがとうございます!