ファクトリを持っているときにgetAll()メソッドを配置する場所

StackOverflow https://stackoverflow.com/questions/1019466

  •  06-07-2019
  •  | 
  •  

質問

Javaアプリケーションを実行しています。

これまでの私のファイル:

個人インターフェイス。

setName(String aName)メソッドがあります

PersonImpl

Person Interfaceの実装。

PersonFactoryインターフェース

createPerson()があります

PersonFactoryImpl

PersonFactoryインターフェースの実装。

問題は、人のコレクションを返すgetAll()メソッドを喜んで追加したことであり、どこに配置するかわからないことです。

静的メソッドとしてPersonImplまたはPersonFactoryImplに追加することを考えていましたが、わかりません。

どの方法が最適ですか?

読んでくれてありがとう!

役に立ちましたか?

解決

PersonFactoryの別の実装が提供されている場合、#getAllも提供する必要がありますか?もしそうなら、それはインターフェースに属します...そして、それはJavaの静的メソッドになることはできません。

それは、PersonFactoryの機能ですか、それともストレージメカニズムの抽象化も必要ですか?その場合、実装がPersonFactoryを受け入れ、getAllタイプの機能の自然なホームを提供するPersonRepositoryインターフェースがより適切であると思われます。そうでない場合、具体的なPersonFactoryのメンバーとして十分に適切である可能性があります...

他のヒント

論理的な方法は、静的メソッドとして PersonFactory に追加することです。これは Person オブジェクトを生成するクラスであり、生成されたすべてのオブジェクトへの参照を保持している場合、 getAll() APIに応答できるはずです。

明らかに、各 Person オブジェクトが他の同様のオブジェクトを認識することは合理的ではないため、このメソッドはそこに属しません。

編集:データベースに存在するという事実を考えると、 PersonFactory Person オブジェクト)、 PersonRepository から実際にデータベースにアクセスする(または保持しているもの)し、 Person オブジェクトを返します。

オブジェクトを作成することと、データベースからオブジェクトを取得することの両方を同じクラスが担当していることは、私には不自然に思えます。そうは言っても、アプリケーションがこの密結合を要求する場合、それは受け入れられるかもしれません。

ファクトリーはPersonsのインスタンスを管理する責任があるため、それを置くのが正しい場所です。さらに、 createPerson()と同様に、静的ではないはずです。

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