Isso é motivado por esta resposta a uma pergunta separada .
O padrão do construtor é usado para simplificar a inicialização complexa, especialmente com parâmetros de inicialização opcionais). Mas não sei como gerenciar adequadamente configurações mutuamente exclusivas.
Aqui está uma Image
aula. Image
pode ser inicializado de um arquivo ou de um tamanho, mas não ambos . O uso de construtores para impor essa exclusão mútua é óbvio quando a classe é bastante simples:
public class Image
{
public Image(Size size, Thing stuff, int range)
{
// ... initialize empty with size
}
public Image(string filename, Thing stuff, int range)
{
// ... initialize from file
}
}
Agora assuma que Image
é realmente configurável o suficiente para que o padrão do construtor seja útil, de repente isso pode ser possível:
Image image = new ImageBuilder()
.setStuff(stuff)
.setRange(range)
.setSize(size) // <---------- NOT
.setFilename(filename) // <---------- COMPATIBLE
.build();
Esses problemas devem ser detectados no tempo de execução e não no tempo de compilação, o que não é a pior coisa. O problema é que a detecção consistente e abrangente desses problemas dentro da ImageBuilder
classe pode se tornar complexa, especialmente em termos de manutenção.
Como devo lidar com configurações incompatíveis no padrão do construtor?