Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Ações de Observer no construtor do Builder

O meu entendimento sobre a vantagem de passar as ações pelo construtor do Builder é que ao instanciar a sua classe, o consumidor sempre será lembrado de que existe a possibilidade (porque ele pode passar uma coleção nula/vazia se o Builder permitir) de executar ações após a criação do objeto desejado (nesse caso, NotaFiscal). Além disso, o Builder pode com o uso do construtor indicar se é obrigatório haver itens nessa coleção para quando instanciar a classe no método Constroi.

Com um nome de parâmetro no construtor que revele a intenção dessa coleção (por exemplo, acoesASeremExecutadasAposCriarNotaFiscal) o consumidor pode implementar um código para o Builder menos suscetível a erros como por exemplo lançamento de exceção devido a ausência de alguma ação ou outro comportamento inesperado. Por outro lado, se tal configuração no Builder estiver disponível por meio de um método, talvez o consumidor consuma o método Constroi sem ter o conhecimento de que na construção do objeto tal comportamento (a execução de ações) esteja disponível (ainda mais se a lista de métodos for considerável no IntelliSense).

Uma outra alternativa - para explicitar para o consumidor de que tal coleção de ações pode ser consumida após criação do objeto desejado - é solicitar como parâmetro do método Constroi.

Acredito que em ambas as alternativas conseguem explicitar melhor que o comportamento do método Constroi há um conjunto de ações que podem ser executadas após a criação do objeto. Ainda sim, minha preferência (questão de gosto do mantenedor do Builder) entre elas é o construtor pois entendo que na legibilidade da implementação do consumidor para utilizar o Builder ficará melhor o método Constroi sem argumento do que com argumento.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software