View
394
Download
0
Embed Size (px)
Citation preview
MEF E ASP.NET MVC 3
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?
Aplicações Monoliticas a origem do caos?
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
Manutenção? Evolução? NÃOOOOOOOO
E agora quem poderá nos defender?
Composição e Extensibilidade
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
Aplicação que abraça mudanças!
Hot Spots – Pontos de extensão na sua aplicação
Injetar não dói e soluciona?
MEF para que ele veio?
Arquitetura do MEF
Parts e ComposableParts
Part
[Import] [Export]
IContract
Catalogos e Containers
Catalog
Part
MEF container
O Processo de composição
Ciclo de vida no MEF
MEF E MVC Casamento ideal
Resolução de Dependências no MVC
ASP.NET MVC 3 usa a interface IDependencyResolverMembros de IDependencyResolverGetService()GetServices()
Implementação baseada no MEFUsando MEF Contrib Mef contrib possui um conventionModel
Opções de implementação de IDependencyResolver
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( // ... ); }}
Unity Application BlockStructureMapCastleWindsor
IDependencyResolver flexível a framworks de DI existentes
Aplicação LEGO
MEF descobre as dependências e ManutenívelEvolutivaSelf-ValidatingTimely
TDD + MEF + MVC
Conclusão
Aplicações mais robustasManutenívelEvolutivaConstruir a aplicação como um LEGOTer uma aplicação testável