none
Melhor abordagem para Injeção de Dependência - via constructor ou via método? RRS feed

  • Pergunta

  • Amigos,
    suponhamos que eu tenha uma classe de domínio que faça uso de um serviço apenas em um determinado método, sendo que, tal método é usado apenas em um processo, ou seja, raramente por assim dizer.

    Neste caso, seria apropriado injetar tal serviço no constructor mesmo, ou quem for chamar o método que usará o serviço injeta no momento da chamada?
    Vejo 3 cenários:
    1) Injecatar via constructor mesmo - padrão;
    2) Criar 2 constructors para a classe, uma com injeção do serviço e outro sem parâmetro algum. Quando o processo que for criar a classe precisar chamar o método que usará o serviço, então cria via constructor que faz a injeção, senão criar via constructor padrão sem injetar o serviço;
    3) Injetar no 'método' direto, quando for usado. Nesta abordagem eu vejo uma vantágem de economia de memória, ou seja, na maioria das vezes que a classe não precisa do serviço o mesmo não é injetado, economizando recursos.

    Qual das três fica mais em conformidade com as boas práticas?

    Att,

    Alessandro
    sexta-feira, 2 de outubro de 2009 14:32

Respostas

  • Alessandro,

    Não vejo problema de utilizar a primeira opção se você trabalhar com um conteiner de DI. Eu iria a principio com essa por simplicidade.
    Não gosto da segunda porque expõe as dependências da classe, o que é muito ruim.
    A terceira opção é válida também, mas como disse, só a utilizaria se a primeira fosse um problema.
    Giovanni Bassi, Microsoft MVP, MCSD, MCPD, CSM, Arquiteto de software - http://www.giovannibassi.com
    sábado, 3 de outubro de 2009 02:09
    Moderador
  • Olá Alessandro,

     

    Neste artigo eu demonstro como podemos criar uma aplicação ASP.NET MVC com um componente chamado StructureMap que viabiliza justamente a Injeção de Dependência:

     

    http://rafaelzaccanini.wordpress.com/2010/11/07/injecao-de-dependencia-com-structuremap/

     

    Pode ser que ajude em algo que estiver faltando!

     

    abs

     

    Rafael Zaccanini

    sábado, 8 de janeiro de 2011 15:16
  • Vai de  Injetar via constructor mesmo - padrão;
    Não esqueça de usar o componente </> na barra para posta seu código.
    quinta-feira, 13 de janeiro de 2011 10:19

Todas as Respostas

  • Alessandro,

    Não vejo problema de utilizar a primeira opção se você trabalhar com um conteiner de DI. Eu iria a principio com essa por simplicidade.
    Não gosto da segunda porque expõe as dependências da classe, o que é muito ruim.
    A terceira opção é válida também, mas como disse, só a utilizaria se a primeira fosse um problema.
    Giovanni Bassi, Microsoft MVP, MCSD, MCPD, CSM, Arquiteto de software - http://www.giovannibassi.com
    sábado, 3 de outubro de 2009 02:09
    Moderador
  • Olá Alessandro,

     

    Neste artigo eu demonstro como podemos criar uma aplicação ASP.NET MVC com um componente chamado StructureMap que viabiliza justamente a Injeção de Dependência:

     

    http://rafaelzaccanini.wordpress.com/2010/11/07/injecao-de-dependencia-com-structuremap/

     

    Pode ser que ajude em algo que estiver faltando!

     

    abs

     

    Rafael Zaccanini

    sábado, 8 de janeiro de 2011 15:16
  • Vai de  Injetar via constructor mesmo - padrão;
    Não esqueça de usar o componente </> na barra para posta seu código.
    quinta-feira, 13 de janeiro de 2011 10:19