Ho un paio di classi che stanno facendo la stessa cosa: riempire una serie di oggetti usando le origini dati passate come parametro. Poiché ho bisogno di due distinti, la mia interfaccia contiene il seguente contratto:
// Arbitrary names, didn't find a good name for the application field yet
public interface DataMapper<O> {
/*
* Those two sources cannot be fused together, they come from
* different places from another API
*/
public O mapData(DataSource first, DataSource second);
}
Tuttavia, ho un problema. Una classe legacy del mio programma utilizza solo la prima di due fonti e non ha bisogno della seconda. Poiché è l'unico che ha bisogno solo di uno su due, ho preso in considerazione l'utilizzo del contratto in questo modo:
Output output = LegacyMapper.mapData(firstDataSource, null);
Ma questo mi sembra sporco: chiunque altro oltre a me attraverso il codice dovrebbe prima chiedermi Perché la seconda sorgente di dati null
, mentre l'interfaccia specifica che hai bisogno di entrambi? .
Quindi quali sono le mie opzioni per creare un design adeguato che non si senta troppo zoppo?
1) Creare un secondo contratto mapData(DataSource onlyData);
, quindi impostare quello non utilizzato come return null
considerando l'implementazione?
2) Creazione di un'altra interfaccia specifica per il legacy mapper?
3) Lasciando il codice così com'è e commentandolo?
Qualsiasi aiuto sarebbe apprezzato.
Grazie!