Domanda

Sto facendo un'applicazione Java.

Questi sono i miei file finora:

Interfaccia persona.

ha un metodo setName (String aName)

PersonImpl

Implementazione dell'interfaccia personale.

Interfaccia PersonFactory

ha un createPerson ()

PersonFactoryImpl

Implementazione dell'interfaccia PersonFactory.

Il fatto è che ero disposto ad aggiungere un metodo getAll () che restituisce una raccolta di persone e non sono sicuro di dove posizionarlo.

Stavo pensando di aggiungerlo come metodo statico a PersonImpl o a PersonFactoryImpl, ma non ne sono sicuro.

Qual è il modo migliore?

Grazie per aver letto!

È stato utile?

Soluzione

Se viene fornita un'altra implementazione di PersonFactory, dovrebbe anche fornire un #getAll? In tal caso, appartiene all'interfaccia ... e quindi non può essere un metodo statico in Java.

Detto questo, è una funzione del tuo PersonFactory o dovrebbe esserci un'astrazione anche per il tuo meccanismo di archiviazione? In tal caso, un'interfaccia PersonRepository le cui implementazioni accettano un PersonFactory e fornisce una casa naturale per la funzionalità di tipo getAll sembra più appropriata. In caso contrario, come membro della PersonFactory concreta potrebbe essere abbastanza appropriato ...

Altri suggerimenti

Il modo logico sarebbe aggiungerlo come metodo statico al PersonFactory . Questa è la classe che genera gli oggetti Person e, se mantiene i riferimenti a tutti gli oggetti generati, dovrebbe essere in grado di rispondere all'API getAll () .

Ovviamente, non è ragionevole che ogni oggetto Person sia a conoscenza di altri oggetti simili, quindi questo metodo non appartiene a questo.

EDIT: dato che risiedono in un database, potrebbe essere saggio disaccoppiare PersonFactory (quale lavoro è creare Person oggetti), da un PersonRepository che accederà effettivamente al database (o qualsiasi altra persistenza) e restituirà oggetti Person .

Mi sembra strano che la stessa classe sia responsabile sia della creazione degli oggetti che del loro recupero da un database. Detto questo, se la tua applicazione richiede questo accoppiamento stretto, potrebbe essere accettabile.

La fabbrica è responsabile della gestione delle istanze di persone, quindi questo è il posto giusto per metterlo. Inoltre, dovrebbe essere non statico come createPerson () .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top