Ho bisogno di eseguire alcune elaborazioni da un formato A a un formato B e da B a A. Il lavoro in una direzione è molto simile alla sua controparte. Entrambi i formati sono rappresentati con un'interfaccia Msg
.
In tal caso, posso vedere quattro soluzioni ovvie, che è la più pulita? Spero che ci siano dei principi concreti che spiegano una scelta rispetto alle altre e non solo preferenze personali
Ecco le scelte ovvie
1) Classi diverse per ogni
public class TransformToA {
public TransformToA() {
...
}
public Msg transform(Msg incoming) {
...
}
}
public class TransformToB {
public TransformToB() {
...
}
public Msg transform(Msg incoming) {
...
}
}
Si noti che in questa opzione, potrei estrarre alcune logiche comuni in una terza classe comune per evitare la duplicazione del codice
2) Un campo booleano per definire la direzione
public class Transformer {
private boolean toBFormat;
public Transformer(boolean toBFormat) {
...
}
public Msg transform(Msg incoming) {
if (toBFormat) {
...
} else {
//to A format
}
}
}
3) un flag booleano sul metodo (questo è probabilmente il peggiore dal momento che il chiamante è costretto a passare il flag ogni volta e fa sì che un metodo si comporti in due modi diversi)
public class Transformer {
public Transformer() {
...
}
public Msg transform(Msg incoming, boolean toBFormat) {
if (toBFormat) {
...
} else {
//to A format
}
}
}
4) Due metodi diversi
public class Transformer {
public Transformer() {
...
}
public Msg transformToA(Msg incoming) {
...
}
public Msg transformToB(Msg incoming) {
...
}
}