1
resposta

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.

1 resposta

Olá, Carlos!

Peço desculpas pela demora em obter um retorno

É ótimo ver que você está buscando entender as melhores práticas de programação.

A sua compreensão sobre a vantagem de passar as ações pelo construtor do Builder está correta. Ao instanciar a classe, o consumidor será lembrado de que existe a possibilidade de executar ações após a criação do objeto desejado, e o Builder pode indicar se é obrigatório haver itens nessa coleção.

A escolha entre passar as ações pelo construtor ou por meio de um método é uma decisão de design e pode depender do contexto específico do seu projeto. Ambas as alternativas têm suas vantagens e desvantagens. Passar as ações pelo construtor pode tornar mais explícito para o consumidor que existe um conjunto de ações disponíveis para serem executadas após a criação do objeto. Por outro lado, passar as ações por meio de um método pode deixar o método Constroi sem argumento, o que pode ser mais legível para o consumidor.

No final das contas, a escolha entre essas alternativas vai depender do gosto do mantenedor do Builder e do contexto do projeto. É importante considerar a clareza e a legibilidade da implementação para quem for utilizar o Builder.

Novamente agradeço por compartilhar seu ponto, e peço desculpas pela demora em obter um retorno.

Abraços e bons estudos!