ファクトリを持っているときにgetAll()メソッドを配置する場所
質問
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()
と同様に、静的ではないはずです。