2
respostas

[Dúvida] Como forçar o desenvolvedor a usar um objeto Builder?

No exemplo utilizado no módulo 04. Expressividade pelo Builder, nada impede que o desenvolvedor instancie a classe NotaFiscal e sete os valores para seus atributos. Como posso "forçar" o desenvolvedor utilizar a classe ConstrutorNotaFiscalProduto por exemplo, e não a classe NotaFiscal direto? Pensei em implementar os métodos construtores dentro da NotaFiscal e mudar os atributos para private, seria correto? Obrigado.

2 respostas

Olá Daniel,

Para que não haja instâncias da classe NotaFiscal, marque-a como abstrata:

abstract class NotaFiscal

A classe NotaFiscal terá as propriedades com visibilidade privada ou protegida e essas receberão seus devidos valores por meio de métodos construtores.

A classe ConstrutorNotaFiscalProduto deve herdar de NotaFiscal e seus construtores devem invocar os devidos construtores da classe mãe.

Bom dia Robson!Apesar de funcionar, não me parece uma solução muito elegante.Pensando no uso, em nosso exemplo, NotaFiscal é uma entidade de negócio, quando for usar, vou ter que instanciar ContrutorNotaFiscal e usá-lo como se fosse uma entidade, semanticamente me parece confuso (pode ser coisa da minha cabeça, hehe).O que você pensa sobre isso?