|
|
Abstract Factory Pattern: É um padrão criacional (Creational Pattern) e é utilizado para criar famílias de objetos relacionados sem especificar suas classes concretas, entenda que o conceito principal nesse Pattern são as famílias de objetos. Builder Pattern: A intenção é abstrair os passos para construção de um objeto da sua representação, levando em consideração que um mesmo processo de construção possa criar várias representações. Service Locator é ter um objeto que sabe como obter todos os serviços que uma aplicação pode ter.
Referência circular: http://msdn.microsoft.com/en-us/library/dd203342.aspx
Chris Tavares
IoC Containers and the Dependency Injection pattern http://www.martinfowler.com/articles/injection.html Unity Application Blockhttp://www.codeplex.com/unity Model-View-Presenter Patternhttp://msdn.microsoft.com/en-us/library/cc304760.aspx Presentation Model http://msdn.microsoft.com/en-us/library/dd458863.aspx Supervising Modelhttp://msdn.microsoft.com/en-us/library/dd490821.aspx Separated Presentation http://msdn.microsoft.com/en-us/library/dd458859.aspx
Injeção de Dependência Como diminuir o acoplamento em suas aplicações Leandro Daniel MCAD, MCSD, CSM
Agenda
Contexto de utilização
Era uma vez...
No início... !
Contornando... Method Stub ConsoleLogger ?
Mudanças acontecem... !! ??
Um provável cenário...
Resumindo Classes com alto acoplamento dificultam a manutenção e testabilidade (podem dificultar o desenvolvimento) Alterações em classes com acoplamento aferente impactam as classes dependentes (e vice-versa) Dependências complexas são difíceis de gerenciar Deixar a aplicação plugável e flexível em geral requer prática (ou um framework) Lembre-se: coesão ≠ acoplamento
Algumas técnicas disponíveis Abstract Factory Pattern Builder Pattern Service Locator Pattern IoC - Inversion of Control Pattern DI - Dependency Injection Pattern
Injeção de Dependência
Design Patterns podem ajudar...
Uma técnica para desacoplamento de classes (um caso particular de IoC) Baseado em um builder responsável pela construção de outros objetos Comumente, apresenta-se sob as três formas: Setter injection Constructor injection Interface Injection Utiliza um container para armazenamento de objetos O que é?
Origem Martin Fowler, popularizou o termo Injeção de Dependência como uma forma de Inversão de Controle
IoC, SL e DI
A aplicação de DI pode representar um risco levando em consideração o skill da equipe? A empresa tem como cultura a prática de testes (TDD ou qualquer outra técnica)? Se a aplicação não tem previsão de vida longa vale a pena aplicar DI? Tomando decisões Eu consigo aumentar o skill da minha equipe aplicando nova técnica? Eu consigo mostrar os benefícios de praticarmos TDD já que DI nos propicia isso mais facilmente? Eu consigo comprovar que os custos com manutenção serão menores se empregarmos melhores técnicas agora, ainda que isso onere um pouco mais o projeto?
Meus objetos e classes possuem dependência de outros objetos? Minhas dependências são complexas e requerem abstração? Injetar dependência na construção ou na chamada de objetos traz alguma vantagem? Preciso gerenciar o tempo de vida dos meus objetos? Preciso configurar as dependências dos meus objetos por meio de um arquivo de configuração? Preciso manter um cache das minhas dependências numa aplicação Web? Quando devo utilizar?
Unity Application Block
Cross-cutting concerns e algo mais...
Unity Application Block Fev/2008 Lançado o CTP do Unity (Responsável: Chris Tavares) http://www.codeplex.com/unity Abr/2008 Lançada a versão 1.0 Mai/2008 Unity é incorporado a Enterprise Library 4.0 Continua com a opção de instalação separada Out/2008 Atualizada juntamente com a Enterprise Library 4.1 Versão separada atualizada para 1.2 Dez/2008 Port do Unity para Silverlight
Demonstração 01 – Olá!
Unity Application Block Possibilita construir instâncias de objetos contendo dependência entre eles Expõe um método chamado RegisterType que suporta a configuração do container com o mapeamento dos objetos (interface classe concreta) Expõe o método Resolve que retorna as instâncias dos métodos construídos com todas as suas dependências resolvidas Provê injeção de dependência para interfaces e construtores de classes por meio de atributos nas propriedades e métodos Suporta hierarquia nos containers, sendo que um container pode conter outro container possibilitando habilitar consultas para localização de objetos Permite configuração em arquivos XML Oferece gerenciamento do tempo de vida do container Cuidado com a referência circular!
Demonstração 02 – Config
Unity Application Block
Demonstração 03 – Métricas
Unity Application Block Simples Extensível Código-fonte disponível AOP
Demonstração 04
Downloads Unity Application Block http://www.codeplex.com/unity Enterprise Library http://www.codeplex.com/entlib NDepend http://www.ndepend.com/
Referências Exemplos complementares http://reverb.leandrodaniel.com/category/Enterprise-Library.aspx IoC Containers and the Dependency Injection pattern http://www.martinfowler.com/articles/injection.html Enterprise Library Contrib http://entlibcontrib.codeplex.com/ Artigo na revista .net Magazine 62
Obrigado! Leandro Daniel contato@leandrodaniel.com http://reverb.leandrodaniel.com
| URL: |
No comments posted yet
Comments