O Managed Extensibility Framework (MEF) é uma nova biblioteca no Microsoft. NET Framework 4 que resolve problemas de software monolítico, simplificando o design de extensões de aplicações e componentes. Nesta sessão, você aprenderá o básico do MEF e verá o MEF sendo utilizado em um uma variedade de aplicações criadas no .NET Framework.
10. AgendaManagedExtensibility Framework (MEF) Objetivos Princípio aberto-fechado Plug-ins Problemas de extensibilidade O ManagedExtensibility Framework (MEF) O MEF como facilitador da extensibilidade Diagrama de extensibilidade com MEF Funcionamento do MEF Exportação e importação no MEF Composição no MEF
11. AgendaManagedExtensibility Framework (MEF) Demo 1: Fundamentos do MEF Criação tardia de instância Demo 2: Criação tardia de instância Tempo de vida das partes Demo 3: Tempo de vida das partes MEFContrib
12. ObjetivosPrincipais assuntos a serem abordados Exposição da importância da extensibilidadeno desenvolvimento de software Introdução à nova biblioteca MEF Incorporada ao .NET Framework 4 e ao Silverlight 4 Apresentação de quando e como o MEF deve ser usado
13. Princípio aberto-fechadoIntrodução e conceito do princípio Termo introduzido por Bertrand Meyer na primeira edição do seu livro Object-Oriented Software Construction, em 1988 Em 1996, Robert C. Martin escreveu o influente artigo “The Open-ClosedPrinciple” Entidades de software devem serabertas para extensão,mas fechadas para modificação Entidade
14. Plug-insConceito e vantagens de uso Plug-in Aplicação hospedeira Gerenciador de plug-ins Serviços O que é um plug-in? Componente de software para acrescentar funcionalidades específicas a uma aplicação maior Vantagens de uso de plug-ins Extensão de aplicações com novas funcionalidades desenvolvidas por terceiros Facilita o acréscimo de novas funcionalidades Reduz o tamanho de uma aplicação Separação de código-fonte numa aplicação devido a incompatibilidades em licenças de software
15. Problemas de extensibilidadeDificuldades mais comuns É comum que aplicações hospedeiras criem uma infraestrutura própria para permitirem extensão Sem reuso em outras implementações Alguns frameworks .NET de extensão ManagedAdd-In Framework (MAF) Projetado no .NET Framework para gerenciar extensões Plux.NET http://ase.jku.at/plux/ Mono.Addins http://monoaddins.codeplex.com/ CompactPlugs & CompactInjection http://compactplugs.codeplex.com/
16. O ManagedExtensibility Framework (MEF)Conceito O que é o MEF? Framework para simplificar a criaçãode aplicações extensíveis Que recursos o MEF oferece? Recursos de descoberta e composição que permitem carregar dinamicamente extensões de aplicações Qual a principal vantagem fornecida pelo MEF? Facilidade de transformar aplicações estaticamente compiladas para dinamicamente compostas
17. O MEF como facilitador da extensibilidadeSolução de problemas de extensibilidade Padrão para exposição e consumo de extensões Facilita o reuso de extensões em várias aplicações Diversas abordagens possíveis de descoberta Facilita a localização e o carregamento de extensões Dispensa a necessidade do registro explícito das extensões disponíveis Metadados permitem marcar extensões Facilita a consulta e filtragem de extensões
19. Funcionamento do MEFCatálogo e contêiner e partes de composição Simplificadamente, o MEF é composto por: Catálogo (Catalog) Responsável por descobrir extensões Contêiner de composição (CompositionContainer) Responsável por coordenar a criação e satisfazer as dependências das partes de composição Parte de composição (ComposablePart) Importações (Imports) Especificação declarativa de suas dependências Exportações (Exports) Especificação declarativa de suas capacidades
20. Exportação e importação no MEFCapacidades e dependências de partes de composição Exportação (Export) Uma parte de composição oferece um ou mais serviços (exportações) Importação (Import) Uma parte de composição pode depender de um ou mais serviços externos (importações) Contrato (Contract) Exportações e importações têm contratos Contratos são as pontes entre exportações e importações
21. Exportação e importação no MEFCapacidades e dependências de partes de composição Eutenho Eupreciso
24. Composição no MEFCombinações das partes de composição dos catálogos AggregatingCatalog O contêiner faz as combinações DirectoryCatalog AssemblyCatalog Catálogo TypeCatalog
25. Composição no MEFEsquema de composição Parte Aplicação hospedeira Precisa de um IContrato [Import] [Export] Tem um IContrato Contêiner de composição Extensão A Parte
32. MEFContribExtensões ao MEF O que é o MEFContrib? Biblioteca de extensões ao ManagedExtensibility Framework (MEF) desenvolvida pela comunidade Recursos Extensões Catálogo genérico Integração Integração com Unity Modelos de programação Modelo de Provider Modelo de convenções
33.
34. Conteúdo relacionadoSessões do Tech·Ed Brasil 2010 DEV 201 - Novidades e razões para migrar para o Microsoft .NETFramework 4 (João Paulo Clementi e Diego Blanco) DEV 301 - Novidades do Windows Communication Foundation (WCF) no .NET Framework 4 (Evilázaro Alves) DEV 305 - Implementando Serviços RESTful usando o Microsoft .NET Framework (Israel Aece) DEV 402 - Desenvolvimento com C# no mundo moderno(Alfred Myers)
35. Conteúdo relacionadoSites e livros indicados MEFCommunity Site (Hospedado no CodePlex)http://mef.codeplex.com/ MEFContrib (Hospedado no CodePlex) http://mefcontrib.codeplex.com/ Object-Oriented Software Construction, 2ndEditionAutor: Bertrand Meyer - Editora: Prentice Hall Clean Code: A Handbook of Agile Software CraftsmanshipAutor: Robert C. Martin - Editora: Prentice Hall
39. Template de PowerPoint Cor do Subtítulo Exemplo de slide com subcabeçalho Defina o cabeçalho do slide em "Title Case" Defina os subcabeçalhos em "sentence case" Procure definir o subcabeçalho em 36pt ou menor para que caiba em uma só linha A cor do subcabeçalho é definida para este template, mas deve ser selecionada no PowerPoint 2007, é a quinta cor de fonte da esquerda para a direita
40. Exemplo de preenchimento Diretrizes para PowerPoint A fonte, o tamanho e a cor do texto foram formatados para você no Slide Mestre Use a palheta de cores exibida abaixo Cor de hyperlink:www.microsoft.com Exemplo de preenchimento Exemplo de preenchimento Exemplo de preenchimento Exemplo de preenchimento Exemplo de preenchimento
41. Slide para exibir código de software Use este layout para exibir o código de software Esta fonte é Consolas, uma fonte monoespaçada O slide não possui bullets, mas os níveis podem ser recuados usando-se o ícone "Aumentar Nível de Lista" no menu de Início Para usar aspas normais " em vez de aspas inglesas ” faça o seguinte: Clique no Botão do Office no canto superior esquerdo Na parte inferior do menu, escolha as Opções do PowerPoint No painel à esquerda, selecione Revisão de Texto Clique no botão Opções de AutoCorreção Selecione a aba AutoFormatação ao Digitar, e desmarque a opção "Aspas normais" por "aspas inglesas".Em seguida clique em OK.
Bertrand Meyer (nasceu em 1950 na França): É um acadêmico, autor e consultor no campo das linguagens de computação. Criador da linguagem de programação Eiffel. Um dos primeiros defensores da Programação Orientada a Objetos (POO). Seu livro Object-Oriented Software Construction é amplamente considerado o melhor trabalho de apresentação de casos de POO. A primeira edição foi publicada em 1988.Object-Oriented Software Construction: Livro escrito por Bertrand Meyer, amplamente considerado um texto fundamental de POO. A primeira edição foi publicada em 1988 e a segunda, extensivamente revisada e expandida (1296 páginas), em 1997. Ambas as edições foram publicadas pela editora Prentice Hall.Princípio aberto-fechado: Entidades de software devem ser abertas para extensão, mas fechadas para modificação. Ou seja, entidades devem permitir modificações em seu comportamento SEM a necessidade de alteração em seu código-fonte. Nesta ideia, a implementação de uma entidade (classe) somente pode ser modificada para corrigir erros.Princípio aberto-fechado de Meyer: A definição de Meyer recomenda a herança de implementação. A implementação pode ser reutilizada por meio de herança, mas especificações de interface não necessitam de implementação.Princípio aberto-fechado polimórfico: Durante a década de 1990, o princípio aberto/fechado foi popularmente redefinido para referenciar o uso de interfaces abstratas, onde as implementações podem ser modificadas e múltiplas implementações podem ser criadas e polimorficamente substituídas umas pelas outras.Em contraste com o uso de Meyer, esta definição recomenda a herança de classes abstratas. Especificações de interfaces podem ser reutilizadas por meio de herança, mas a implementação não precisa. A interface existente é fechada para modificações e novas implementações, no mínimo, implementam esta interface.Em 1996, Robert Cecil Martin (autor e consultor de software americano, informalmente chamado “Uncle Bob” ou “Tio Bob”) escreveu o artigo “The Open-ClosedPrinciple” que foi uma das escritas mais influentes desta abordagem.
Mecanismo dos plug-insA aplicação hospedeira fornece serviços que o plug-in pode usar, incluindo uma maneira dos plug-ins se registrarem com a aplicação hospedeira e um protocolo para troca de dados com o plug-in. Plug-ins dependem dos serviços fornecidos pela aplicação hospedeira e usualmente não funcionam por si próprios. Por outro lado, a aplicação hospedeira opera de maneira independente dos plug-ins, tornando possível aos usuários finais adicionar a atualizar plug-ins dinamicamente sem a necessidade de fazer mudanças na aplicação hospedeira.ApplicationProgramming Interfaces (APIs) abertas fornecem uma interface padrão, permitindo que terceiros criem plug-ins que interagem com a aplicação hospedeira. Uma API estável permite que plug-ins de terceiros continuem a funcionar mesmo com mudanças na versão original e para estender o ciclo de vida de aplicações obsoletas. As APIs de plug-in do Adobe Photoshop e do AfterEffects se tornaram padrão e aplicações concorrentes como o Corel Paint Shop Pro as adotou.Informações complementares:http://en.wikipedia.org/wiki/Plug-in_(computing)
Informações no tópico “Whatproblems does MEF solve?” da documentação: http://mef.codeplex.com/wikipage?title=Overview&referringTitle=DocumentationMEF and MAFPrevious versions of the .NET Framework introduced the Managed Add-in Framework (MAF), designed to allow applications to isolate and manage extensions. The focus of MAF is slightly higher-level then MEF, concentrating on extension isolation and assembly loading and unloading, while MEF's focus is on discoverability, extensibility, and portability. The two frameworks interoperate smoothly, and a single application can take advantage of both.
O MEF facilita a extensibilidade permitindo uma programação mais declarativa.Informações no tópico “WhatisMEF?” da documentação: http://mef.codeplex.com/wikipage?title=Overview&referringTitle=Documentation
What problems does MEF solve?MEF presents a simple solution for the runtime extensibility problem. Until now, any application that wanted to support a plugin model needed to create its own infrastructure from scratch. Those plugins would often be application-specific and could not be reused across multiple implementations.MEF provides a standard way for the host application to expose itself and consume external extensions. Extensions, by their nature, can be reused amongst different applications. However, an extension could still be implemented in a way that is application-specific. Extensions themselves can depend on one another and MEF will make sure they are wired together in the correct order (another thing you won't have to worry about). MEF offers a set of discovery approaches for your application to locate and load available extensions. MEF allows tagging extensions with additonal metadata which facilitates rich querying and filtering
O núcleo do modelo de composição é o contêiner de composição, que contem todas as partes disponíveis e realiza a composição. Ou seja, ele faz a correspondência entre as importações e as exportações.Para descobrir as partes disponíveis, o contêiner de composição faz uso de um catálogo. Um catálogo é um objeto que torna disponíveis partes de alguma fonte. O MEF fornece catálogos para descobrir partes de um tipo fornecido, um assembly ou um diretório. Desenvolvedores de aplicações podem facilmente criar novos catálogos para descobrir partes de outras fontes, como um Web Service.