27

Web camps mef

Embed Size (px)

Citation preview

Page 1: Web camps   mef
Page 2: Web camps   mef

MEF E ASP.NET MVC 3

Page 3: Web camps   mef

Cadu SouzaTwitter: @cadu_szawww.arquiteturando.com.br

Foco em Arquitetura de Software, Boas Práticas, TDD, DDDCertified Scrum MasterArticulista da Revista .NET Magazine

Quem sou eu?

Page 4: Web camps   mef

Aplicações Monoliticas a origem do caos?

Page 5: Web camps   mef

O Que dá origem a este tipo de aplicação?

Desenvolvimento sem TDDIgnorar princípios de desenvolvimentoFalta de sabedoria na hora de aplicar padrões de projeto ou aplicaçãoFoco somente na entrega e desprezo da qualidade de códigoForte Acoplamento e baixa coesão

Page 6: Web camps   mef

Manutenção? Evolução? NÃOOOOOOOO

Page 7: Web camps   mef

E agora quem poderá nos defender?

Page 8: Web camps   mef

Composição e Extensibilidade

Page 9: Web camps   mef

Fundamentos e AliadosTDDS.O.L.I.DTecnologias aderentes a extensão e composiçãoPadrões e Princípios de DesenvolvimentoBaixo Acoplamento e Alta coesão

Page 10: Web camps   mef

Aplicação que abraça mudanças!

Page 11: Web camps   mef

Hot Spots – Pontos de extensão na sua aplicação

Page 12: Web camps   mef

Injetar não dói e soluciona?

Page 13: Web camps   mef

MEF para que ele veio?

Page 14: Web camps   mef

Arquitetura do MEF

Page 15: Web camps   mef

Parts e ComposableParts

Part

[Import] [Export]

IContract

Page 16: Web camps   mef

Catalogos e Containers

Catalog

Part

MEF container

Page 17: Web camps   mef

O Processo de composição

Page 18: Web camps   mef

Ciclo de vida no MEF

Page 19: Web camps   mef

MEF E MVC Casamento ideal

Page 20: Web camps   mef

Resolução de Dependências no MVC

ASP.NET MVC 3 usa a interface IDependencyResolverMembros de IDependencyResolverGetService()GetServices()

Page 21: Web camps   mef

Implementação baseada no MEFUsando MEF Contrib Mef contrib possui um conventionModel

Opções de implementação de IDependencyResolver

Page 22: Web camps   mef

Conventions no MefContrib-MVC3public class MvcApplicationRegistry : PartRegistry { public MvcApplicationRegistry() { Scan(x => { x.Assembly(Assembly.GetExecutingAssembly()); x.Directory(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin")); });

Part() .ForTypesAssignableFrom<IController>() .MakeNonShared() .ExportTypeAs<IController>() .ExportType() .Imports( // ... ); }}

Page 23: Web camps   mef

Unity Application BlockStructureMapCastleWindsor

IDependencyResolver flexível a framworks de DI existentes

Page 24: Web camps   mef

Aplicação LEGO

Page 25: Web camps   mef

MEF descobre as dependências e ManutenívelEvolutivaSelf-ValidatingTimely

TDD + MEF + MVC

Page 26: Web camps   mef

Conclusão

Aplicações mais robustasManutenívelEvolutivaConstruir a aplicação como um LEGOTer uma aplicação testável

Page 27: Web camps   mef