getter multipli per alcuni campi

0

Ho 2 DTO che hanno campi equivalenti così quello che ho fatto è che li faccio implementare un'interfaccia per trattarli allo stesso modo di un tipo di interfaccia (evitare la duplicazione) quindi ho inserito nell'interfaccia alcuni Getter e Setter che ho bisogno di fare la logica di business.

Tuttavia, poiché i campi hanno nomi diversi ma il loro contenuto è lo stesso

(ad esempio requestAmount nella prima classe è loanAmount nella seconda)

quello che ho fatto è solo quello di scavalcare i getter dell'interfaccia con un nuovo getter che chiama l'altro solo per adattarlo all'interfaccia Quindi il mio POJO finisce con più getter per alcuni campi.

In questo modo:

public void setRequestAmount(BigDecimal amount)
{
    setLoanAmount(amount);
}

@Override
public BigDecimal getRequestAmount()
{
    return getLoanAmount();
}

È una cattiva pratica? c'è qualche altra soluzione?

    
posta Mohamed Amine Mrad 28.07.2017 - 14:08
fonte

2 risposte

1

Non è una cattiva pratica in sé e per sé. A volte ci sono dei motivi per farlo. Ma è un indicatore che le tue classi potrebbero non essere correlate come sembrano.

Solo perché entrambe le classi hanno un campo dello stesso tipo non significa che dovrebbero implementare la stessa interfaccia. La domanda è: sono entrambi casi specifici di un concetto comune e significativo? (Con il quale intendo diverso da "l'oggetto con un concetto di campo BigDecimal ").

Se non esiste un concetto del genere, non dovrebbe esserci un'interfaccia di questo tipo. Tieni presente che può trattarsi di un concetto di dominio aziendale o di un concetto tecnico (come Serializable ), ma in base al nome presumo che non sia un concetto tecnico.

Pensa al nome del metodo e vedi se riesci a trovarne uno che abbia senso per entrambe le classi. Se non puoi, è un primo suggerimento che potrebbe non esserci un concetto del genere. Eccezione: è un fatto noto del dominio aziendale che ci sono termini diversi per la stessa cosa.

Hai algoritmi che funzionano con entrambe le classi (cioè che usi solo l'interfaccia ma non sai quale classe sia)? Utilizzi effettivamente questi algoritmi per entrambe le classi? In caso contrario, questo è un altro segno che non sono correlati.

È RequestAmountHolder (o qualsiasi altra cosa che viene chiamata l'interfaccia) un concetto nel tuo dominio aziendale? In altre parole, un utente vedrebbe le due classi come casi speciali di cose che hanno un importo? O il tuo utente lo considererebbe uno strano modo di parlare di una richiesta di prestito (per esempio)?

Per quanto riguarda le alternative, dipende molto dal resto della tua applicazione. Ma se scopri che non esiste un concetto comune per le classi, eppure hai un sacco di algoritmi che funzionano con i metodi get / set, senza sapere nient'altro sulle classi, è possibile che queste operazioni siano davvero metodi di una Amount class.

    
risposta data 28.07.2017 - 20:58
fonte
0

Penso che il tuo bisogno possa essere coperto dal Adattatore modello di progettazione.

Ad esempio, questo può aiutare ad esporre la stessa interfaccia al resto del tuo programma scrivendo gli adattatori delle tue due classi base.

    
risposta data 03.08.2017 - 14:53
fonte

Leggi altre domande sui tag