none
Utilizando Interface para diminuir acoplamento RRS feed

  • Pergunta

  •  

    Olá comunidade...

    Estou iniciando meus estudos para me tornar um arquiteto de software...

    Sou um desenvolvedor experiente em .NET e estou começando a me dirigir para  a arquitetura de software.

     

    Minha dúvida inical é, como eu faço para utilizar o conceito de interfaces para diminuir o acoplamento entre camadas?

     

    Já pensei, tentei imaginar situações onde isso pode ser utilizado, mas, não consegui visualizar sua utilização...

     

     

    Agradeço pela sua atenção...

    terça-feira, 8 de janeiro de 2008 19:06

Respostas

  • Fala cara!

     

    Eu recomendo você estudar os princípios de inversão de controle/injeção de dependência.

     

    http://martinfowler.com/articles/injection.html

     

    Existem diversas maneiras de utilizarmos esse princípios para conseguir o baixo acoplamento entre os componentes, mas não precisa ser necessariamente através de interfaces. Inclusive existem frameworks que facilitam muito esse trabalho como o Spring e o Castle Microkernel/Windsor.

     

    Caso precise de exemplos mais práticos, é só avisar.

     

    [ ] ´s
    terça-feira, 8 de janeiro de 2008 20:02
  •  

    Só para complementar, a utilização de alguns design patterns ou mesmo princípios como IoC para diminuir o acomplamento devem surgir de alguma necessidade da nossa arquitetura/projeto, não podemos somente utilizar porque está na moda, vejo isso acontecendo as vezes com o uso de frameworks como o Spring.

     

    Uma boa situação para a utilização dos princípios são os testes unitários, com certeza eles ficam melhores quando há um baixo acoplamento entre os componentes.

     

    O link abaixo mostra um questionamento sobre a utilização de Injeção de Dependência, acho que são bons argumentos para decidirmos utilizar ou não em nossa arquitetura.

     

    http://www.infoq.com/news/2007/12/does-di-pay-off

    quarta-feira, 9 de janeiro de 2008 19:06
  • Buenas!!

    Eu concordo com você e com o seu professor de que devemos evitar ao máximo componentes acoplados, porém para fazer isso temos um custo, que em alguns casos pode ser performance e na maioria dos casos complexidade.

    Após a experiência que tive em alguns projetos de sempre buscar o mundo perfeito, as melhores práticas, eu percebi que em alguns casos é desnecessário. Hoje em qualquer projeto que participo, eu procuro entender antes de tudo alguns fatores importantes na tomada das minhas decisões técnicas, como por exemplo: competência da equipe, prazo, performance, escalabilidade e após ter essas informações eu tomo as decisões utilizando técnicas, padrões e princípios que atendam as minhas necessidades.

    Onde quero chegar? Não é porque o professor falou ou por que a comunidade está usando que devemos seguir algum conceito, no meu entender a principal qualidade de um arquiteto é ter um lado crítico e sempre questionar. Eu já vi alguns casos de pessoas que estudaram design patterns e descobriram que é uma boa prática o uso de interfaces, após isso sairam codificando todo o sistema com interfaces e maioiria delas eram desnecessárias, ou seja, só gerava complexidade e não havia ganho nenhum.

     

    O mundo ideal é uma arquitetura com alta coesão e baixo acoplamento, mas sempre temos que avaliar e saber se realmente é necessário em alguns casos, pois normalmente uma implementação com inversão de controle tem uma complexidade maior.

     

    Só para finalizar, quero deixar claro que sou a favor de sistemas com baixo acoplamento e por coincidencia estou trabalhando em um componente onde estou utilizando inversão de controle, mas antes de utilizar fiz um estudo e surgiu a sua necessidade.

     

     

     

    quinta-feira, 10 de janeiro de 2008 13:07
  •  

    Eu fiz uma série de artigos que implementa um windows service usando e abusando (propositalmente) de interfaces e IoC.

     

    http://www.eduardomiranda.net/blogs/dotnet/archive/2007/12/13/criando-um-windows-service-em-csharp--indice.aspx

     

    Eduardo Miranda

    quarta-feira, 16 de janeiro de 2008 00:04
  • Só para complementar:

     

    Na próxima versão da Enterprise Library, a equipe de Patterns & Pratices irá disponibilizar um framework para IoC: http://www.codeplex.com/entlib/Wiki/View.aspx?title=EntLib4%20Backlog

     

    Three Ways to Implement Dependency Injection in .NET Applications:

    http://www.devx.com/dotnet/Article/34066

     

     

    quarta-feira, 16 de janeiro de 2008 12:26

Todas as Respostas

  • Fala cara!

     

    Eu recomendo você estudar os princípios de inversão de controle/injeção de dependência.

     

    http://martinfowler.com/articles/injection.html

     

    Existem diversas maneiras de utilizarmos esse princípios para conseguir o baixo acoplamento entre os componentes, mas não precisa ser necessariamente através de interfaces. Inclusive existem frameworks que facilitam muito esse trabalho como o Spring e o Castle Microkernel/Windsor.

     

    Caso precise de exemplos mais práticos, é só avisar.

     

    [ ] ´s
    terça-feira, 8 de janeiro de 2008 20:02
  •  

    Só para complementar, a utilização de alguns design patterns ou mesmo princípios como IoC para diminuir o acomplamento devem surgir de alguma necessidade da nossa arquitetura/projeto, não podemos somente utilizar porque está na moda, vejo isso acontecendo as vezes com o uso de frameworks como o Spring.

     

    Uma boa situação para a utilização dos princípios são os testes unitários, com certeza eles ficam melhores quando há um baixo acoplamento entre os componentes.

     

    O link abaixo mostra um questionamento sobre a utilização de Injeção de Dependência, acho que são bons argumentos para decidirmos utilizar ou não em nossa arquitetura.

     

    http://www.infoq.com/news/2007/12/does-di-pay-off

    quarta-feira, 9 de janeiro de 2008 19:06
  • Fala rapaz!

     

    Seguinte.. na faculdade quando estudei Projetos de Sistema da Informação, o professor deixou claro que nós devemos evitar ao máximo criar classes, componentes e módulos muito acoplados..

    Este conceito estaria errado?!

    E se estiver certo, IoC não deveria estar presente na maioria dos projetos como "boas práticas"?

    quarta-feira, 9 de janeiro de 2008 22:55
  • Buenas!!

    Eu concordo com você e com o seu professor de que devemos evitar ao máximo componentes acoplados, porém para fazer isso temos um custo, que em alguns casos pode ser performance e na maioria dos casos complexidade.

    Após a experiência que tive em alguns projetos de sempre buscar o mundo perfeito, as melhores práticas, eu percebi que em alguns casos é desnecessário. Hoje em qualquer projeto que participo, eu procuro entender antes de tudo alguns fatores importantes na tomada das minhas decisões técnicas, como por exemplo: competência da equipe, prazo, performance, escalabilidade e após ter essas informações eu tomo as decisões utilizando técnicas, padrões e princípios que atendam as minhas necessidades.

    Onde quero chegar? Não é porque o professor falou ou por que a comunidade está usando que devemos seguir algum conceito, no meu entender a principal qualidade de um arquiteto é ter um lado crítico e sempre questionar. Eu já vi alguns casos de pessoas que estudaram design patterns e descobriram que é uma boa prática o uso de interfaces, após isso sairam codificando todo o sistema com interfaces e maioiria delas eram desnecessárias, ou seja, só gerava complexidade e não havia ganho nenhum.

     

    O mundo ideal é uma arquitetura com alta coesão e baixo acoplamento, mas sempre temos que avaliar e saber se realmente é necessário em alguns casos, pois normalmente uma implementação com inversão de controle tem uma complexidade maior.

     

    Só para finalizar, quero deixar claro que sou a favor de sistemas com baixo acoplamento e por coincidencia estou trabalhando em um componente onde estou utilizando inversão de controle, mas antes de utilizar fiz um estudo e surgiu a sua necessidade.

     

     

     

    quinta-feira, 10 de janeiro de 2008 13:07
  • Que tipo de teste você fez pra descobrir essa necessidade?

    Sinto falta desse tipo de material...

    Eu já li e re-li várias vezes o conteúdo... mas falta uma idéia prática =(

     

    Você tem material desse tipo aí?!

    sexta-feira, 11 de janeiro de 2008 17:27
  •  

    Eu fiz uma série de artigos que implementa um windows service usando e abusando (propositalmente) de interfaces e IoC.

     

    http://www.eduardomiranda.net/blogs/dotnet/archive/2007/12/13/criando-um-windows-service-em-csharp--indice.aspx

     

    Eduardo Miranda

    quarta-feira, 16 de janeiro de 2008 00:04
  • Só para complementar:

     

    Na próxima versão da Enterprise Library, a equipe de Patterns & Pratices irá disponibilizar um framework para IoC: http://www.codeplex.com/entlib/Wiki/View.aspx?title=EntLib4%20Backlog

     

    Three Ways to Implement Dependency Injection in .NET Applications:

    http://www.devx.com/dotnet/Article/34066

     

     

    quarta-feira, 16 de janeiro de 2008 12:26