Eu tenho dois objetos que representam um 'Bar / Club' (um lugar onde você bebe / socializa).
Em um cenário, preciso do nome da barra, endereço, distância, slogon
Em outro cenário, preciso do nome da barra, endereço, URL do site, logotipo
Então, eu tenho dois objetos representando a mesma coisa, mas com campos diferentes.
Eu gosto de usar objetos imutáveis, então todos os campos são definidos pelo construtor .
Uma opção é ter dois construtores e anular os outros campos, ou seja:
class Bar {
private final String name;
private final Distance distance;
private final Url url;
public Bar(String name, Distance distance){
this.name = name;
this.distance = distance;
this.url = null;
}
public Bar(String name, Url url){
this.name = name;
this.distance = null;
this.url = url;
}
// getters
}
Eu não gosto disso, pois você precisaria verificar nulo quando usar os getters
No meu exemplo real, o primeiro cenário possui 3 campos e o segundo cenário, cerca de 10; portanto, seria uma dor real ter dois construtores , a quantidade de campos que eu precisaria declarar nula e, quando o objeto estiver em uso, você não você não sabe qual Bar
você está usando e quais campos seriam nulos e quais não.
Que outras opções eu tenho?
Duas classes chamadas BarPreview
e Bar
?
Algum tipo de herança / interface?
Outra coisa que é incrível?
You should only ask practical, answerable questions based on actual problems that you face.
E isso é exatamente o que está acontecendo aqui
Bar
como identificador!