Injeção de Dependência com Unity

+9

No comments posted yet

Comments

Slide 10

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.

Slide 17

Referência circular: http://msdn.microsoft.com/en-us/library/dd203342.aspx

Slide 20

Chris Tavares

Slide 29

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

Slide 1

Injeção de Dependência Como diminuir o acoplamento em suas aplicações Leandro Daniel MCAD, MCSD, CSM

Slide 2

Agenda

Slide 3

Contexto de utilização

Slide 4

Era uma vez...

Slide 5

No início... !

Slide 6

Contornando... Method Stub ConsoleLogger ?

Slide 7

Mudanças acontecem... !! ??

Slide 8

Um provável cenário...

Slide 9

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

Slide 10

Algumas técnicas disponíveis Abstract Factory Pattern Builder Pattern Service Locator Pattern IoC - Inversion of Control Pattern DI - Dependency Injection Pattern

Slide 11

Injeção de Dependência

Slide 12

Design Patterns podem ajudar...

Slide 13

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 é?

Slide 14

Origem Martin Fowler, popularizou o termo Injeção de Dependência como uma forma de Inversão de Controle

Slide 15

IoC, SL e DI

Slide 16

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?

Slide 17

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?

Slide 18

Unity Application Block

Slide 19

Cross-cutting concerns e algo mais...

Slide 20

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

Slide 21

Demonstração 01 – Olá!

Slide 22

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!

Slide 23

Demonstração 02 – Config

Slide 24

Unity Application Block

Slide 25

Demonstração 03 – Métricas

Slide 26

Unity Application Block Simples Extensível Código-fonte disponível AOP

Slide 27

Demonstração 04

Slide 28

Downloads Unity Application Block http://www.codeplex.com/unity Enterprise Library http://www.codeplex.com/entlib NDepend http://www.ndepend.com/

Slide 29

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

Slide 30

Obrigado! Leandro Daniel contato@leandrodaniel.com http://reverb.leandrodaniel.com

URL: