Conceber aplicações de software bem estruturadas e flexíveis a mudanças
tem sido um dos grandes desafios impostos à área de desenvolvimento de sistemas
no decorrer dos anos. As organizações estão cada vez mais sujeitas a
transformações repentinas e de profundo impacto. Isto acaba por exigir dos
profissionais de Tecnologia da Informação uma resposta rápida ao atendimento de
novas demandas ou, ainda, à adaptação de soluções pré-existentes.
Prazos exíguos, equipes reduzidas, falta de planejamento, inexistência
de uma modelagem para a solução a ser entregue, dentre outros aspectos, quase
sempre resultarão em codificação de baixa qualidade para a solução que será
obtida. Isto pode se constituir, futuramente, num verdadeiro pesadelo em
situações que exijam adaptações de funcionalidades já criadas anteriormente.
A utilização da técnica de desenvolvimento em camadas, prática
amplamente difundida no mercado, procura fornecer meios para a criação de
aplicações mais flexíveis. Entretanto, a simples utilização deste tipo de
abordagem não garante por si só resultados positivos. Ainda existirá a
possibilidade de se chegar a um produto que faz uso de classes de objetos com um
alto grau de acoplamento; com isto, ajustes que na teoria seriam simples levam
a mudanças drásticas em todo um software, aumentando ainda a chance de se
introduzirem erros inesperados na solução. A Injeção de Dependência auxilia a
resolver esse dilema, desacoplando as camadas criadas.
Primeiramente, deve-se levar em conta que a Injeção de Dependência
(DI, do inglês Dependency Injection) é na verdade, uma aplicação específica de
um conceito mais abrangente conhecido como Inversão de Controle (IoC, do inglês
Inversion of Control).
A Inversão de Controle é uma técnica na qual um objeto delega a
execução de uma atividade a outra classe, ao invés de tentar controlar diversos
aspectos que fugiriam do objetivo inicial para o qual havia sido definido. Esta
característica é particularmente importante, já que permite o desenvolvimento
de classes com um maior grau de coesão, visto que não acumulam um grande número
de responsabilidades, o que do contrário dificultaria a manutenção futura das
mesmas e resultaria em um software mais propenso a falhas.
O uso de injeção de dependência também é uma forma de se aplicar
o conceito de inversão de controle. Neste caso ao invés de um objeto instanciar
todas as classes das quais depende, o mesmo delega a outro mecanismo esta
tarefa (container). Ao se optar pela utilização de um container o mesmo será
responsável pelas seguintes atividades: Analisar de quais tipos de objetos uma
classe depende; Criar os objetos a serem consumidos; Associar as instâncias de
objetos criadas à classe consumidora, sendo que a isto se chama “resolver” as
dependências.
Dentre as vantagens da adoção de um framework de injeção de dependência,
merece ser destacado: Foco no desenvolvimento voltado ao uso de interfaces, com
a obtenção de aplicações em que os componentes tendem a ser mais coesos, além
de estarem fracamente acoplados entre si, já que o conceito de Injeção de
Dependência privilegia o desenvolvimento de software em camadas; Flexibilidade
diante da necessidade de mudanças, devido à redução na dependência entre as
partes que constituem uma aplicação; O desenvolvimento de software seguindo
boas práticas, uma vez que os conceitos de Inversão de Controle e Injeção de
Dependência promovem o uso de patterns amplamente difundidos e utilizados com
sucesso pela comunidade de desenvolvedores; Evita-se a duplicação de código
instanciando classes e que estaria espalhado por toda uma solução.
Inversão de Controle e Injeção de
Dependência são os temas de destaque desta edição da ClubeDelphi, que você vai
poder conferir no artigo do Rafael Stavarengo.
Lista completa de artigos da edição:
Data Binding no WPF com Delphi Prism
Fabrício
Hissao Kawata
Bancos de Dados Gratuitos – Parte 3
Vitor
Luiz Rubio
Utilizando diagramas UML no Delphi XE
Fabrício
Hissao Kawata
Criando controles visuais no Lazarus e
no Delphi
Felipe Monteiro de Carvalho
VÍDEO
Veja nesta vídeo aula como criar
Web Controls em Delphi Prism
Guinther Pauli
Inversão de Controle e Injeção de Dependência
Rafael
Stavarengo
VÍDEO
Veja nesta vídeo aula como trabalhar
com Injeção de Dependência em Delphi Prism
Guinther Pauli
Usando o Padrão Singleton
Vitor
Luiz Rubio
Delphi Prism vs. Delphi Win32
Conhecendo as diferenças e
incompatibilidades entre as linguagens
Rodrigo Araujo
VÍDEO
Veja nesta vídeo aula como trabalhar com
métodos de extensão no Delphi
Guinther Pauli