Existe uma terceira opção que é o idioma mais orientado a objetos
A melhor coisa a fazer é usar o padrão Builder
.
A classe tem um construtor no-arg padrão, e você define todos os parâmetros necessários e chama .build()
ou .materialize()
ou algum método apropriadamente nomeado para validar e finalizar a construção do objeto e obter uma referência para o objeto concluído.
Isso pode ser usado com muito sucesso com o padrão de design Fluent API
.
Aqui está um exemplo de como aplicar uma aderência da API de padrão do Construtor para construir apenas objetos válidos . A postagem do blog é sobre Java, mas se aplica a qualquer linguagem orientada a objetos do tipo estaticamente que suporte interfaces. Isso torna muito fácil saber o que você deve fazer em seguida com o preenchimento automático em um IDE também.
Eu não sou um grande fã do padrão Fluent API
porque ele pode ser abusado muito facilmente, e quando ele abusou do encadeamento do método torna muito difícil diagnosticar exceções, mas neste caso em particular é muito apropriado.