SETEMBRO, 2010 | SÃO PAULO
Instruções gerais (hidden slide):Instruções aos palestrantes: Complete este slide para que o Track Owner avalie a sequência da sua apresentação, tópicos cobertos, integração das demos e alinhamento do conteúdo com a descrição e nível da sessão. Título:Como e onde devo utilizar o ManagedExtensibility Framework (MEF)?
Nível Técnico:300
Audiência foco:Desenvolvedores com experiência  em programação orientada a objetos e na linguagem de programação C# 3 ou superior
Objetivos (quais são as três principais mensagens que você gostaria que a audiência absorva):
1Motivações para criação do MEF como facilitador na extensão de software
2O princípio de funcionamento do MEF: exportação, importação e composição
3A integração do MEF com o .NET Framework 4 e o Silverlight 4
Sequência da sua apresentação (incluindo as demos):CÓDIGO DA SESSÃO:DEV302Como e onde devo utilizar o ManagedExtensibility Framework (MEF)?Nível Técnico: 300Rogério Moraes de CarvalhoConsultor e Instrutor de TIVITA Informática@rogeriomc
AgendaManagedExtensibility Framework (MEF)ObjetivosPrincípio aberto-fechadoPlug-insProblemas de extensibilidadeO ManagedExtensibility Framework (MEF)O MEF como facilitador da extensibilidadeDiagrama de extensibilidade com MEFFuncionamento do MEFExportação e importação no MEFComposição no MEF
AgendaManagedExtensibility Framework (MEF)Demo 1: Fundamentos do MEFCriação tardia de instânciaDemo 2: Criação tardia de instânciaTempo de vida das partesDemo 3: Tempo de vida das partesMEFContrib
ObjetivosPrincipais assuntos a serem abordadosExposição da importância da extensibilidadeno desenvolvimento de softwareIntrodução à nova biblioteca MEFIncorporada ao .NET Framework 4 e ao Silverlight 4Apresentação de quando  e como o MEF deve ser usado
Princípio aberto-fechadoIntrodução e conceito do princípioTermo introduzido por Bertrand Meyer na primeira edição do seu livro Object-Oriented Software Construction, em 1988Em 1996, Robert C. Martin escreveu o influente artigo “The Open-ClosedPrinciple”Entidades de software devem serabertas para extensão,mas fechadas para modificaçãoEntidade
Plug-insConceito e vantagens de usoPlug-inAplicação hospedeiraGerenciadorde plug-insServiçosO que é um plug-in?Componente de software para acrescentar funcionalidades específicas a uma aplicação maiorVantagens de uso de plug-insExtensão de aplicações com novas funcionalidades desenvolvidas por terceirosFacilita o acréscimo de novas funcionalidadesReduz o tamanho de uma aplicaçãoSeparação de código-fonte numa aplicação devido a incompatibilidades em licenças de software
Problemas de extensibilidadeDificuldades mais comunsÉ comum que aplicações hospedeiras criem uma infraestrutura própria para permitirem extensãoSem reuso em outras implementaçõesAlguns frameworks .NET de extensãoManagedAdd-In Framework (MAF)Projetado no .NET Framework para gerenciar extensõesPlux.NEThttp://ase.jku.at/plux/Mono.Addinshttp://monoaddins.codeplex.com/CompactPlugs & CompactInjectionhttp://compactplugs.codeplex.com/
O ManagedExtensibility Framework (MEF)ConceitoO que é o MEF?Framework para simplificar a criaçãode aplicações extensíveisQue recursos o MEF oferece?Recursos de descoberta e composição que permitem carregar dinamicamente extensões de aplicaçõesQual a principal vantagem fornecida pelo MEF?Facilidade de transformar aplicações estaticamente compiladas para dinamicamente compostas
O MEF como facilitador da extensibilidadeSolução de problemas de extensibilidadePadrão para exposição e consumo de extensõesFacilita o reuso de extensões em várias aplicaçõesDiversas abordagens possíveis de descobertaFacilita a localização e o carregamento de extensõesDispensa a necessidade do registro explícito das extensões disponíveisMetadados permitem marcar extensõesFacilita a consulta e filtragem de extensões
Diagrama de extensibilidade com MEFRelacionamento entre os componentes do MEF
Funcionamento do MEFCatálogo e contêiner e partes de composiçãoSimplificadamente, o MEF é composto por:Catálogo (Catalog)Responsável por descobrir extensõesContêiner de composição (CompositionContainer)Responsável por coordenar a criação e satisfazer as dependências das partes de composiçãoParte de composição (ComposablePart)Importações (Imports) Especificação declarativa de suas dependênciasExportações (Exports)Especificação declarativa de suas capacidades
Exportação e importação no MEFCapacidades e dependências de partes de composiçãoExportaçã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 contratosContratos são as pontes entre exportações e importações
Exportação e importação no MEFCapacidades e dependências de partes de composiçãoEutenhoEupreciso
Composição no MEFCatálogoO catálogo fornece as partesCatálogo
Composição no MEFContêiner de composiçãoO contêiner faz as combinaçõesCatálogo
Composição no MEFCombinações das partes de composição dos catálogosAggregatingCatalogO contêiner faz as combinaçõesDirectoryCatalogAssemblyCatalogCatálogoTypeCatalog
Composição no MEFEsquema de composiçãoParteAplicação hospedeiraPrecisa de um IContrato[Import][Export]Tem um IContratoContêiner de composiçãoExtensão AParte
Fundamentos do MEF
Criação tardia de instânciaParte AParte B
Criação tardia de instânciaParte ALazy<B>
Criação tardia de instância
Tempo de vida das partesParte compartilhada(Shared)Parte não compartilhada(Non-Shared)ContêinerContêinerParte AParte BParte BParte B

Microsoft Tech·Ed Brasil 2010: DEV302 - Como e onde devo utilizar o Managed Extensibility Framework (MEF)

  • 1.
  • 2.
    Instruções gerais (hiddenslide):Instruções aos palestrantes: Complete este slide para que o Track Owner avalie a sequência da sua apresentação, tópicos cobertos, integração das demos e alinhamento do conteúdo com a descrição e nível da sessão. Título:Como e onde devo utilizar o ManagedExtensibility Framework (MEF)?
  • 3.
  • 4.
    Audiência foco:Desenvolvedores comexperiência em programação orientada a objetos e na linguagem de programação C# 3 ou superior
  • 5.
    Objetivos (quais sãoas três principais mensagens que você gostaria que a audiência absorva):
  • 6.
    1Motivações para criaçãodo MEF como facilitador na extensão de software
  • 7.
    2O princípio defuncionamento do MEF: exportação, importação e composição
  • 8.
    3A integração doMEF com o .NET Framework 4 e o Silverlight 4
  • 9.
    Sequência da suaapresentação (incluindo as demos):CÓDIGO DA SESSÃO:DEV302Como e onde devo utilizar o ManagedExtensibility Framework (MEF)?Nível Técnico: 300Rogério Moraes de CarvalhoConsultor e Instrutor de TIVITA Informática@rogeriomc
  • 10.
    AgendaManagedExtensibility Framework (MEF)ObjetivosPrincípioaberto-fechadoPlug-insProblemas de extensibilidadeO ManagedExtensibility Framework (MEF)O MEF como facilitador da extensibilidadeDiagrama de extensibilidade com MEFFuncionamento do MEFExportação e importação no MEFComposição no MEF
  • 11.
    AgendaManagedExtensibility Framework (MEF)Demo1: Fundamentos do MEFCriação tardia de instânciaDemo 2: Criação tardia de instânciaTempo de vida das partesDemo 3: Tempo de vida das partesMEFContrib
  • 12.
    ObjetivosPrincipais assuntos aserem abordadosExposição da importância da extensibilidadeno desenvolvimento de softwareIntrodução à nova biblioteca MEFIncorporada ao .NET Framework 4 e ao Silverlight 4Apresentação de quando e como o MEF deve ser usado
  • 13.
    Princípio aberto-fechadoIntrodução econceito do princípioTermo introduzido por Bertrand Meyer na primeira edição do seu livro Object-Oriented Software Construction, em 1988Em 1996, Robert C. Martin escreveu o influente artigo “The Open-ClosedPrinciple”Entidades de software devem serabertas para extensão,mas fechadas para modificaçãoEntidade
  • 14.
    Plug-insConceito e vantagensde usoPlug-inAplicação hospedeiraGerenciadorde plug-insServiçosO que é um plug-in?Componente de software para acrescentar funcionalidades específicas a uma aplicação maiorVantagens de uso de plug-insExtensão de aplicações com novas funcionalidades desenvolvidas por terceirosFacilita o acréscimo de novas funcionalidadesReduz o tamanho de uma aplicaçãoSeparação de código-fonte numa aplicação devido a incompatibilidades em licenças de software
  • 15.
    Problemas de extensibilidadeDificuldadesmais comunsÉ comum que aplicações hospedeiras criem uma infraestrutura própria para permitirem extensãoSem reuso em outras implementaçõesAlguns frameworks .NET de extensãoManagedAdd-In Framework (MAF)Projetado no .NET Framework para gerenciar extensõesPlux.NEThttp://ase.jku.at/plux/Mono.Addinshttp://monoaddins.codeplex.com/CompactPlugs & CompactInjectionhttp://compactplugs.codeplex.com/
  • 16.
    O ManagedExtensibility Framework(MEF)ConceitoO que é o MEF?Framework para simplificar a criaçãode aplicações extensíveisQue recursos o MEF oferece?Recursos de descoberta e composição que permitem carregar dinamicamente extensões de aplicaçõesQual a principal vantagem fornecida pelo MEF?Facilidade de transformar aplicações estaticamente compiladas para dinamicamente compostas
  • 17.
    O MEF comofacilitador da extensibilidadeSolução de problemas de extensibilidadePadrão para exposição e consumo de extensõesFacilita o reuso de extensões em várias aplicaçõesDiversas abordagens possíveis de descobertaFacilita a localização e o carregamento de extensõesDispensa a necessidade do registro explícito das extensões disponíveisMetadados permitem marcar extensõesFacilita a consulta e filtragem de extensões
  • 18.
    Diagrama de extensibilidadecom MEFRelacionamento entre os componentes do MEF
  • 19.
    Funcionamento do MEFCatálogoe contêiner e partes de composiçãoSimplificadamente, o MEF é composto por:Catálogo (Catalog)Responsável por descobrir extensõesContêiner de composição (CompositionContainer)Responsável por coordenar a criação e satisfazer as dependências das partes de composiçãoParte de composição (ComposablePart)Importações (Imports) Especificação declarativa de suas dependênciasExportações (Exports)Especificação declarativa de suas capacidades
  • 20.
    Exportação e importaçãono MEFCapacidades e dependências de partes de composiçãoExportaçã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 contratosContratos são as pontes entre exportações e importações
  • 21.
    Exportação e importaçãono MEFCapacidades e dependências de partes de composiçãoEutenhoEupreciso
  • 22.
    Composição no MEFCatálogoOcatálogo fornece as partesCatálogo
  • 23.
    Composição no MEFContêinerde composiçãoO contêiner faz as combinaçõesCatálogo
  • 24.
    Composição no MEFCombinaçõesdas partes de composição dos catálogosAggregatingCatalogO contêiner faz as combinaçõesDirectoryCatalogAssemblyCatalogCatálogoTypeCatalog
  • 25.
    Composição no MEFEsquemade composiçãoParteAplicação hospedeiraPrecisa de um IContrato[Import][Export]Tem um IContratoContêiner de composiçãoExtensão AParte
  • 26.
  • 27.
    Criação tardia deinstânciaParte AParte B
  • 28.
    Criação tardia deinstânciaParte ALazy<B>
  • 29.
  • 30.
    Tempo de vidadas partesParte compartilhada(Shared)Parte não compartilhada(Non-Shared)ContêinerContêinerParte AParte BParte BParte B

Notas do Editor

  • #8 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.
  • #9 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)
  • #10 Informações no tópico “Whatproblems does MEF solve?” da documentação: http://mef.codeplex.com/wikipage?title=Overview&amp;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&apos;s focus is on discoverability, extensibility, and portability. The two frameworks interoperate smoothly, and a single application can take advantage of both.
  • #11 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&amp;referringTitle=Documentation
  • #12 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&apos;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
  • #14  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.