Este documento apresenta os principais conceitos de Inversão de Dependência (Dependency Inversion) e Injeção de Dependência (Dependency Injection) através da utilização de um Container (Castle Windsor). Apresenta também os princípios SOLID de Robert C. Martin e como aplicá-los para um código mais organizado e flexível.
27. UNCLE BOB (ROBERT C. MARTIN)
• Um dos pais do desenvolvimento ágil
• Conferencista desde 1990.
• Pai dos princípios SOLID, tidos
hoje como um padrão no Design
Orientado a Objetos (OOD).
• Autor de diversos livros, entre
eles: “Clean Code”, “The Clean
Coder”, “Agile Software
Development, Principles, Patterns,
and Practices” e “Agile
Principles, Patterns, and Practices
in C#”.
28.
29. SINGLE RESPONSIBILITY PRINCIPLE (SRP)
“Não deve haver mais do
que UMA razão para uma
classe mudar.”
As classes ou métodos
devem possuir apenas uma
responsabilidade.
A classe que realiza a
movimentação financeira
de uma conta não deve
manipular dados do
usuário, por exemplo. Só porque você pode, não significa que você deve.
30. OPEN CLOSED PRINCIPLE (OCP)
“Entidades de software devem
estar abertas para
extensão, mas fechadas para
modificação”
A alteração do comportamento
de uma classe deve ser feita
com a criação de uma
extensão (herança) ou de uma
composição.
Não é necessário abrir o peito quando quer um casaco.
31. LISKOV SUBSTITUTION PRINCIPLE (LSP)
“Métodos que usam referências
para classes base devem
conseguir usar classes derivadas
sem tomar conhecimento disso.”
Deve ser possível substituir
uma classe base por suas
classes derivadas em qualquer
ponto do código.
Se parece um pato, grasna como um pato, mas precisa de
baterias, provavelmente você tem problemas de abstração.
32. INTERFACE SEGREGATION PRINCIPLE (ISP)
“Clientes não devem ser obrigados
a depender de interfaces que eles
não usam”.
Mantenha suas interfaces
pequenas e coesas.
Você quer que eu ligue isto, onde?
33. DEPENDENCY INVERSION PRINCIPLE (DIP)
“Módulos de alto nível não podem
depender de módulos de baixo
nível, ambos devem depender de
abstrações.
Abstrações não devem depender de
detalhes, detalhes devem depender
de abstrações.”
Para que sejam facilmente
reutilizáveis, os módulos devem
possuir um baixo acoplamento
entre si. Você solda uma lâmpada diretamente na fiação em uma parede?
34.
35. DESIGN PATTERNS PARA APLICAR O DIP
• Abstract Factory Pattern
• Builder Pattern
• Service Locator Pattern
• Dependency Injection Pattern - DI
• Inversion of Control Pattern - IoC
Martin Fowler popularizou o termo Injeção de Dependência
como uma forma de Inversão de Controle
38. CONTEINERES DE DI/IOC
Gerenciam o uso das
classes, isto é, criação,
destruição, duração e
configuração de instâncias
bem como as dependências
das classes.
Dessa forma nossas classes
de negócio não precisam
criar e configurar as classes
das quais dependem.
47. REFERÊNCIAS
Web – Em inglês - SOLID
http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod - Principios de OOD
- SOLID
http://hanselminutes.com/145/solid-principles-with-uncle-bob-robert-c-martin-
Podcast do Scott Hanselman com o Uncle Bob sobre SOLID
http://en.wikipedia.org/wiki/SOLID_(object-oriented_design) – Wikipedia
Web – Em inglês – Castle.Windsor
http://docs.castleproject.org/Windsor.MainPage.ashx - Página oficial do projeto
http://www.castleproject.org/container/gettingstarted/part1/index.html - Exemplo
bem simples de um dos usos.
48. REFERÊNCIAS
Web – Em inglês
http://blog.objectmentor.com/ - Blog da empresa do Uncle Bob
http://www.hanselman.com/blog/ - Scott Hanselman – Principal Program Manager @
Microsoft
http://weblogs.asp.net/scottgu/ - Scott Guthrie – Corporate Vice President @ Microsoft
Server and Tools division
http://channel9.msdn.com/ - Channel 9 – Videos produzidos pela equipe da Microsoft
Web - Em português
http://blogs.msdn.com/b/wcamb/ - Waldemir Cambiucci – Arquiteto na Microsoft Brasil –
Blog interrompido mas com muito conteúdo legal
http://www.israelaece.com/ - Israel Aece
http://elemarjr.net/ - Elemar Jr. – Um dos melhores blogueiros que já vi.