De que se trata o artigo

Utilização da biblioteca da Microsoft System.AddIn, que nasceu com o objetivo de permitir a criação de aplicações extensíveis, seguindo os conceitos de composição e extensibilidade. Entendimento da arquitetura do System.AddIn, e explicação detalhada dos componentes que participam de todo processo que dá suporte a esta tecnologia.


Para que serve

Criação de aplicações utilizando o conceito de composição e extensibilidade, que permite ser adicionado ao software a capacidade de ser estendido em tempo de execução adicionando ao mesmo capacidades adicionais ou até mesmo ampliando suas funcionalidades com uma arquitetura orientada a plugin, utilizando a API da Microsoft System.AddIn.


Em que situação o tema é útil

No desenvolvimento de sistemas orientados a objetos, em que a aplicação possa ser automatizada, ter suas capacidades estendidas ou fazer uso de plug-ins como serviços externos fornecidos por terceiros.

Composição e Extensibilidade com System.AddIn

Atualmente, vemos no mercado, uma gama muito grande de aplicações que dão suporte a extensibilidade, como por exemplo: ERPs, produtos da plataforma Microsoft Office e até mesmo avançadas ferramentas de desenvolvimento. O conceito de extensibilidade, não é novo, mas o que faltavam eram tecnologias que tornassem mais suave o desenvolvimento de soluções baseadas neste conceito. Atualmente tem surgido no mercado tecnologias que dão total suporte à utilização deste conceito em aplicações empresariais, e o system.AddIn é uma destas tecnologias que além de ser nativa ao .NET Framework, é muito simples de se utilizar.

Composição e extensibilidade, falar destes termos é falar de algo que há muito é perseguido na engenharia de software. A grande questão de criar softwares que sejam adaptáveis, fáceis de modificar e ter suas capacidades ampliadas é algo extremamente importante e que atualmente custa por parte das empresas algo em torno de 80% do seu investimento em termos de software. A engenharia de software tem evoluído muito nesta questão nos últimos anos, visando ter a mesma capacidade que já é notória em outras engenharias, como a engenharia mecânica, elétrica etc. O que vemos nestas engenharias é a alta capacidade de substituição ou até mesmo adição de componentes.

Um exemplo claro que pode ser citado, é o de um automóvel, que após ter sido fabricado e entregue ao seu cliente, é possível facilmente adicionar componentes de som, substituição de capô e até mesmo a troca do seu motor. Quem nunca sonhou em ter um software que se comporte da mesma maneira? Quem nunca desejou criar um software que mesmo após sua compilação e até mesmo distribuição, fosse capaz de ampliar suas capacidades ou até mesmo modificar a maneira de como aquele software se comporta? Ou expor um modelo de objetos que pudesse ser utilizado por terceiros para criar soluções customizadas que se ajustem no software como um brinquedo de encaixe de peças, permitindo inúmeras combinações?

Para se chegar neste grau de composição e extensibilidade, é necessário que façamos uso de boas práticas de desenvolvimento de software, é imprescindível, que se faça uso de técnicas que nos auxiliem nesta difícil, mas não impossível missão de criar software extensível. Para entrarmos no assunto da extensibilidade, temos que citar também, alguns patterns que são bem conhecidos do mercado e que serão utilizados como uma das ferramentas para atingirmos a tão sonhada composição e extensibilidade. Estes patterns são a Inversão de Controle (Inversion Of Control) e Injeção de Dependência (Dependency Injection), estes dois patterns, são fundamentais para se obter extensibilidade e composição dentro de um software.

Utilizamos a inversão de controle, no sentido de se alterar a maneira de como criamos componentes dentro de um software, normalmente o que é feito é se utilizar um “new” e fazer a criação de um determinado componente concreto, o ponto negativo desta ação é que desta maneira cria-se um forte acoplamento dentro do sistema, e que dificulta a extensão do mesmo. A inversão de controle muda este cenário e passamos a basear nosso desenvolvimento em abstrações e não em classes concretas, desta forma invertemos o controle que passa estar na direção aposta, ou seja, na direção dessas abstrações e não mais de classes concretas, tornamos assim nossas dependências externas mais leves, e passamos a atuar em um nível abstrato e deixamos que alguém implemente funções ou serviços do qual nosso software dependa. A ideia é como se os componentes “pulassem” para o seu executável e se “auto-criassem” para que você possa fazer uso do mesmo, sem ter uma rígida dependência para o objeto do qual seu software depende.

A Injeção de dependência é uma das formas de se fazer inversão de controle, ela é uma das técnicas que serão utilizadas para tornar o software extensível. A injeção de dependência vai atuar no sentido se “injetar”, ou seja, fornecer a dependência externa da qual seu software depende. Quando trabalhamos em um nível abstrato, não sabemos ao certo quem irá implementar a determinada abstração, e por isso utilizamos frameworks de injeção de dependência, para descobrir quem implementa uma determinada abstração, ou seja, alguém que irá resolver a dependência e sua possível cadeia de objetos inteira. Após ter sido resolvida a dependência, o objeto está disponível para ser utilizado pela parte do software que depende deles.

...
Quer ler esse conteúdo completo? Tenha acesso completo