As soluções do @Vinicius e do @Ricardo eu já havia chegado. O problema
é que no meu caso IPrecificador já é utilizado por diversos outros
objetos então vou ter que criar uma fabrica especifica pra criar cada
um desses objetos que usem IPrecificador. Além de ser utilizado em
diversos objetos, como uso container de DI as vezes ele é instanciado
em Nivel 2 do grafo de objetos, as vezes no Nivel 3.
@Felipe,
sua idéia é boa, mas onde vou passar a loja selecionada pra ser usada
na criação?
O método que vocês estão chamando de ExecutarTodoEsseProcesso é um
serviço WCF. Ele é o cara que usa o container de DI pra instanciar o
GeradorPedido e chamar os métodos que devem ser chamados.
On Jul 28, 3:22 pm, Vinicius Quaiato <
vinicius.quai...@gmail.com>
wrote:
> Entendi.
>
> É uma outra abordagem :P
>
> 2010/7/28 Ricardo Simões <
rsc....@gmail.com>
>
>
>
> > Oi,
>
> > Sobre o Builder, para a solução em questão não vejo a necessidade de sua
> > utilização. Só isso.
>
> > O que eu quis ilustrar foi o seguinte trecho de código.
>
> > //Trecho de código que você ilustrou
> > public void ExecutarTodoEsseProcesso(Loja lojaSelecionada)
> > {
> > var precificadorEscolhido =
> > AbstracaoDoContainer.CriarInstanciaDe<IPrecificador>(lojaSelecionada);
>
> > var geradorDePedido = new GeradorDePedido(precificadorEscolhido);
> > geradorDePedido.GerarNovo(pedido);
> > }
>
> > Aqui um trecho de código que o método GerarNovo poderia encapsular.
>
> > // Se desejar variar o algoritmo de geração de acordo com o tipo ou alguma
> > outra informação do pedido de pedido.
> > var estrategia =
> > FabricaDeEstrategias.Fabricar<IEstrategiaDeGeracaoDePedidos>(pedido);
>
> > this.GerarNovoPedidoBaseadoEm(estrategia, precificador);
>
> > Aí está a minha idéia inicial.
>
> > []'s
>
> > Ricardo Simões
>
> > 2010/7/28 Vinicius Quaiato <
vinicius.quai...@gmail.com>
>
> >> Puts Ricardo,
> >> Ou eu não entendi nada do que vc falou, ou vc criou um monstro :P
>
> >> Concordo com o que vc disse sobre a especialidade. Mas o que isso tem com
> >> o Builder? Um Buider cria objetos em partes, só isso.
>
> >> Pelo que entendi do Tuca, não existem vários Geradores diferentes, o que
> >> muda é o Precificador que vai dentro do Gerador, este por sua vez que
> >> depende da Loja conhecida em runtime.
>
> >> Sendo assim, não dá mesmo para usar um container para o precificador, e
> >> por isso sugeri uma estratégia baseada na Loja para conter o precificador.
>
> >> *Vinicius Quaiato*
> >>
http://viniciusquaiato.com
>
> >> Twitter <
http://vquaiato>
> >> 2010/7/28 Ricardo Simões <
rsc....@gmail.com>
>
> >>> Oi, Vinicius,
>
> >>> Achei mesmo que tinha entendido seu conceito.
>
> >>> Contudo minha afirmação é realmente sobre o conceito da especialidade por
> >>> domínio. Não consigo imaginar um domínio que precise de mais de um
> >>> especialista na função de gerar pedidos.
>
> >>> Claro que o algoritmo de geração de pedido pode variar, como é o caso do
> >>> nosso amigo tuca, entretanto não é necessário solicitar isto para um outro
> >>> especialista na função, basta que ele saiba qual é o algoritmo de geração
> >>> que precisa utilizar e dar o resultado desejado.
>
> >>> Por este motivo acredito que um Strategy mesclado com FactoryMethod e
> >>> talvez um TemplateMethod resolva o problema.
>
> >>> Eu só iria considerar utilizar um container para os Precificadores, que
> >>> aí sim pode haver a necessidade de consultar mais que um neste domínio.
>
> >>> []'s
>
> >>> Ricardo Simões
>
> >>> 2010/7/28 Vinicius Quaiato <
vinicius.quai...@gmail.com>
>
> >>>> Então ricardo, eu disse um Builder por que pelo que entendi mais de um
> >>>> lugar usa o Gerador, e o gerador depende de um IPrecificador, que por sua
> >>>> vez depende de uma loja.
>
> >>>> Para matar essa dependência com a loja, crio uma fábrica de
> >>>> EstratégiasDePrecificacao, e depois de obter passo a estratégia para o
> >>>> Gerador.
>
> >>>> Na verdade o Builder seria para ocultar os passos da criação do Gerador
> >>>> apenas.
>
> >>>> *Vinicius Quaiato*
> >>>>
http://viniciusquaiato.com
>
> >>>> Twitter <
http://vquaiato>
> >>>> 2010/7/28 Ricardo Simões <
rsc....@gmail.com>
>
> >>>>> Oi,
>
> >>>>> Só não concordo com o Vinicius em ter que criar um Builder para isso,
> >>>>> uma fabrica de estratégias já seria suficiente para criar seu especialista
> >>>>> na precificação.
>
> >>>>> Além do mais não estou entendendo porque o GeradorDePedido precisa de
> >>>>> um container DI para ser criado.
>
> >>>>> Ele me parece ser um serviço especialista na função, e normalmente
> >>>>> teremos um único especialista na função por domínio.
>
> >>>>> Digo isso, porque imagino que no seu domínio você não precise de um
> >>>>> GeradorDePedidoDeCarros, GeradorDePedidosDeImoveis...
>
> >>>>> Ao que parece o container vai morrer mesmo...
>
> >>>>> []'s
>
> >>>>> Ricardo Simões
>
> >>>>> 2010/7/28 Vinicius Quaiato <
vinicius.quai...@gmail.com>
>
> >>>>>> Não sei se precisa de uma AbstractFactory Tuca.
>
> >>>>>> Seu ponto é conseguir criar o GeradorDePedido, que agora depende de
> >>>>>> uma Loja que só é conhecida em runtime.
>
> >>>>>> Isso está mais para um Builder. E eu abriria mão do container nessa
> >>>>>> situação. O builder recebendo uma Loja cria o seu Gerador.
>
> >>>>>> Afinal o Gerado não muda por causa da loja, o que muda é o
> >>>>>> Precificador, por isso acho que não cabe uma abstract factory.
>
> >>>>>> E sobre a dependência de outro sobre IPrecificador, utilizaria uma
> >>>>>> fábrica para eles, baseado na loja. E essa fábrica será também consumida
> >>>>>> pelo Builder.
>
> >>>>>> Acho que o container vai dançar. Ou se alguém souber umas mágicas mais
> >>>>>> avançadas, manda aê.
>
> >>>>>> *Vinicius Quaiato*
> >>>>>>
http://viniciusquaiato.com
>
> >>>>>> Twitter <
http://vquaiato>
> ...
>
> read more »