Usuário com melhor resposta
Qual a vantagem de utilizar D.I

Pergunta
-
Olá pessoal,
Acabei de conseguir fazer minha primeira App usando Unity Framework para fazer D.I , e acabei vendo que o que eu já utilizava não é diferente do novo código, atualmente eu tenho uma DaoFactoy assim :
public static class DaoFactory<T> { public static T Create() { //instancia o objeto genérico passado como argumento T domainModel = Activator.CreateInstance<T>(); return domainModel; } }
private ITipoCadastroService _iTipoCadastroService2; private ITipoCadastroService _iTipoCadastroService3; private string teste; public HomeController(ITipoCadastroService iTipoCadastroService2) { _iTipoCadastroService2 = iTipoCadastroService2; _iTipoCadastroService3 = DaoFactory<DaoTipoCadastro>.Create(); teste = "Teste"; }
Queria saber assim por cima, se alguem conseguiu ver alguma vantagem em usar o Unity, ou se é a mesma coisa que estou fazendo atualmente..
Obrigado
Att.
Leonardo Lima- Editado C. Augusto Proiete [MVP]Moderator quinta-feira, 11 de fevereiro de 2010 23:49 Ao abrir um tópico você já indica se trata-se de uma dúvida ou discussão. Não há a necessidade de colocar um "prefixo" no título.
- Movido C. Augusto Proiete [MVP]Moderator quinta-feira, 11 de fevereiro de 2010 23:50 Movido para o fórum apropriado (De:ASP.NET MVC)
Respostas
-
Fala Leonardo,
Sugiro que você dê uma olhada nessa palestra , que fala exatamente sobre DI com o Unity.
Você verá que "economia de código", não é, nem de longe, uma vantagem importante de se utilizar DI no seu sistema.
A grande vantagem é minimizar o acoplamento entre os módulos do seu sistema...
Forte abraço,
André Borges Medeiros
MCT, MCPD, MCTS
>> Se a resposta solucionar sua dúvida, favor Votar como Útil- Sugerido como Resposta C. Augusto Proiete [MVP]Moderator quinta-feira, 11 de fevereiro de 2010 23:49
- Marcado como Resposta Leonardo Lima sexta-feira, 12 de fevereiro de 2010 10:14
-
Leonardo,Independente do container de injeção de dependência que você usa (eu particularmente gosto do Spring.Net), a vantagem que eu percebo é minimizar o acoplamento na aplicação.As classes passam a conhecer as outras somente via uma interface, o que simplifica a "troca" de implementações e mocks para os casos de unit tests.Geralmente ajuda a evitar um pouco o "samba" de referências que geralmente acontece nos projetos...Abraço,Eric
- Marcado como Resposta Leonardo Lima sexta-feira, 12 de fevereiro de 2010 10:14
Todas as Respostas
-
Fala Leonardo,
Sugiro que você dê uma olhada nessa palestra , que fala exatamente sobre DI com o Unity.
Você verá que "economia de código", não é, nem de longe, uma vantagem importante de se utilizar DI no seu sistema.
A grande vantagem é minimizar o acoplamento entre os módulos do seu sistema...
Forte abraço,
André Borges Medeiros
MCT, MCPD, MCTS
>> Se a resposta solucionar sua dúvida, favor Votar como Útil- Sugerido como Resposta C. Augusto Proiete [MVP]Moderator quinta-feira, 11 de fevereiro de 2010 23:49
- Marcado como Resposta Leonardo Lima sexta-feira, 12 de fevereiro de 2010 10:14
-
Leonardo,Independente do container de injeção de dependência que você usa (eu particularmente gosto do Spring.Net), a vantagem que eu percebo é minimizar o acoplamento na aplicação.As classes passam a conhecer as outras somente via uma interface, o que simplifica a "troca" de implementações e mocks para os casos de unit tests.Geralmente ajuda a evitar um pouco o "samba" de referências que geralmente acontece nos projetos...Abraço,Eric
- Marcado como Resposta Leonardo Lima sexta-feira, 12 de fevereiro de 2010 10:14
-
Mas vc pode registrar todas as suas DAO's do projeto apenas com tres ou quatro linhas, se elas nao tiverem parametros como strings, ou algo assim. Dai elas precisam de uma linha pra cada.
COmo foi falado com a unity vc consegue registrar as interfaces do seu projeto, e a unity instancia a classe concreta pra vc, ficando facil realizar a inversão de controle permitndo o desacoplamento da sua aplicação.
Sem contar que é mais rapido que chamar Activator.CreateInstance toda vez.
Se sua pergunta foi respondida por favor marque a resposta como certa. -
Danimar,Me despertou interesse sobre está citação que você fez:"Mas vc pode registrar todas as suas DAO's do projeto apenas com tres ou quatro linhas, se elas nao tiverem parametros como strings, ou algo assim. Dai elas precisam de uma linha pra cada."
Você poderia dar um exemplo? Por que fiquei com dúvida na parte "se elas não tiverem parametros como string", isto é referente à parametros no construtor da DAO?ObrigadoAtt.
Leonardo Lima -
Ontem tava sem um exemplo, por isso não coloquei.
Mas aqui esta meu registry que utilizo em meu projeto para buscar os objetos.
Private _Container As Microsoft.Practices.Unity.UnityContainer Public Sub New() _Container = New Microsoft.Practices.Unity.UnityContainer() Inicializar() End Sub Private Sub Inicializar() 'TODO Este parametro é essencial para achar o web service _Container.RegisterType(GetType(Repositorio.WebService.LocalServidor), New Microsoft.Practices.Unity.InjectionConstructor("localhost/FotoProduto.WebService")) RegistrarTipos(GetType(Repositorio.WebService.Repositoriobase).Assembly) 'RegistrarTipos(GetType(Repositorio.SqlServer.Repositoriobase).Assembly)
Essa é toda minha classe que registra e retorna todos os tipos. Todos os tipos tem no seu construtor um objeto do primeiro tipo que eu registro passando uma string no construtor.
End Sub
Private Sub RegistrarTipos(ByVal assembly As System.Reflection.Assembly)
Dim tipos = assembly.GetTypes()
For Each tipo In tipos
If tipo.IsAbstract = False Then
For Each [interface] In tipo.GetInterfaces()
_Container.RegisterType([interface], tipo)
Next
End If
Next
End Sub
Public Function RetornarObjeto(Of T)() As T
Return _Container.Resolve(Of T)()
End Function
Eu ainda fiz uma coisa errada aqui, pois deveria ter colocado como parametro no construtor do registry o local do webservice.
Vc pode ver no exemplo acima que tem duas linhas que chamam o metodo RegistrarTipos(), uma esta comentada,
A primeira registra os DAO's para acessar o webservice, e a segunda para acessar diretamente o sql server, isto porque temos duas aplicações que utilizam a mesma camada de acesso a dados, mas uma é windows e dai pra ficar mais seguro nós chamamos atraves do webservice. Apenas com uma linha trocamos a forma de acesso a dados.
Se sua pergunta foi respondida por favor marque a resposta como certa.