Se un metodo ha troppi parametri, il suggerimento è di convertirli in un oggetto parametro. Dove posizionare tali oggetti parametro? nel pacchetto delle classi dominio / entità? o se ho un pacchetto separato per DTO, dovrei metterlo lì?
In parole povere:
Suggerirei di inserirlo nello stesso pacchetto della classe il cui metodo, avendo inizialmente una firma così lunga, ha originato la necessità di tale oggetto paramter.
Le classi di parametri sono comunque classi appartengono al pacchetto in cui si trovano il resto delle classi correlate. A prescindere dal fatto che abbiano o meno un comportamento, a proposito, potrebbero finire per avere la strada.
La prima cosa che cerco di fare è in qualche modo concettualizzare i parametri in una o più classi coesive. Diciamo che abbiamo un metodo come questo:
public void sendEmail(String firstName, String lastName, String email, String subject, Map<String, String> headers, String body)
Riesco a vedere due gruppi di parametri coesivi. Ha senso creare una sorta di "concetti" da questi: Utente e EmailMessaggio. Questi concetti (classi) sembrano abbastanza riutilizzabili (potrebbero persino esistere già!) Quindi li ho inseriti in dto package.
Naturalmente, questo esempio è banale, la realtà è più complessa, ma è spesso possibile creare concetti significativi e coerenti dopo un po 'di riflessione.
Se non riesci a trovare concetti ragionevoli nei parametri, potrebbe essere segno di odore di codice. Il metodo sta cercando di fare troppo ecc.
Ma diciamo che il design è buono ma hai ancora molti parametri. Questi casi accadono. Tu crei la classe parametro, è usata solo in una delle tue firme di metodi. In tal caso, spesso inserisco questa classe come classe statica interna vicino al suo utilizzo nella firma del metodo (in classe o nell'interfaccia), ad es. direttamente sopra di esso.
In alternativa puoi anche inserirlo in un pacchetto dto. A mio parere, questi casi dovrebbero essere piuttosto rari e in ogni caso è OK. Sfortunatamente non troverai una soluzione definita definitiva.
Leggi altre domande sui tag java