SlideShare uma empresa Scribd logo
1 de 71
Padrões de design no .NET Framework Giovanni Bassi ConsultorIndependente Microsoft MVP C# 26/01/2010
Ou...5 Padrões em 50 minutos 2
Giovanni Bassi
Online @ ,[object Object]
.Net ArchitectsGrupo:		www.dotnetarchitects.netPodcast:	podcast.dotnetarchitects.netOnline: 	tinyurl.com/DotNetArchDojo:		dojo.dotnetarchitects.netTwitter: 	#DotNetArchitects@NetArchitects4
Agenda 5
Padrões de Projeto 6
Quando você começa a estudar padrões de projeto 7
8
9 Alguémjápensounisso antes!
10
11
12
Alguns padrões de projeto 13 Na wikipedia: http://tinyurl.com/dpwiki
Strategy (ou Policy) 14
Strategy 15
Strategy – código publicclassContexto { publicEstrategiaEstrategia { get; set; } } publicabstractclassEstrategia { } publicclassEstrategiaConcreta1 : Estrategia { } publicclassEstrategiaConcreta2 : Estrategia { } 16 Poderia ser uma Interface
Strategy – código classController  { publicIRepositorioRepositorio { get; set; } publicvoidExcluir(Entidadeentidade)     { Repositorio.Excluir(entidade.Id);     } } interfaceIrepositorio { voidExcluir(int id); } 17
Strategy – repositório SQL Server classRepositorioSQLServer : Irepositorio { publicvoidExcluir(int id) {  //altera o banco de dados  } } 18
Strategy – repositório XML classRepositorioXml : Irepositorio { publicvoidExcluir(int id) { //altera o xml } } 19
Strategy – repositório para testes classRepositorioFalso : IRepositorio { publicboolChamouExcluir; publicintIdChamado; publicvoidExcluir(int id)     { ChamouExcluir = true; IdChamado = id;     } } 20
21 “ Definaumafamília de algoritmos, encapsulecada um, e torne-osintercambiáveis. Strategy permiteque o algoritmovarieindependente dos clientesque o utilizam.
22 Encapsule e separe o que muda
23 “Policy”? (“Política”?)
24 Princípio SOLID Open ClosedPrinciplePrincípio aberto fechado ,[object Object]
Você deve ser capaz de estender uma classe sem modificá-la
Separe o pode mudar do que não deve mudar
Só é possível com abstrações,[object Object]
Template Method 26
Template Method 27
Template Method – código abstractclassTransferencia { publicvoidTransferir() { Debitar(); Creditar(); AcoesPosLancamento(); } protectedvirtualvoidAcoesPosLancamento(){ } protectedabstractvoidCreditar(); protectedabstractvoidDebitar(); } 28 Template Method
Template Method– código abstractclassTransferencia { publicvoidTransferir() { Debitar(); Creditar(); AcoesPosLancamento(); } protectedvirtualvoidAcoesPosLancamento(){ } protectedabstractvoidCreditar(); protectedabstractvoidDebitar(); } 29 Algoritmo encapsulado
Template Method– código abstractclassTransferencia { publicvoidTransferir() { Debitar(); Creditar(); AcoesPosLancamento(); } protectedvirtualvoidAcoesPosLancamento(){ } protectedabstractvoidCreditar(); protectedabstractvoidDebitar(); } 30 Gancho
Template Method – Transferência interna classTransferenciaInterna : Transferencia { protectedoverridevoidCreditar()     { //creditarcontainterna     } protectedoverridevoidDebitar()     { //debitarcontainterna     } } 31
Template Method – DOC classDOC : Transferencia { protectedoverridevoidCreditar()     { //creditarbanco de destino     } protectedoverridevoidDebitar()     { //debitarbanco local     } protectedoverridevoidAcoesPosLancamento()     { //notificarbanco de destino, etc...     } } 32
33 “ Define um esqueleto de algoritmos em um método, delegando alguns passos a subclasses. O método permite que subclasses redefinam alguns passos de um algoritmo sem mudar a estrutura do algoritmo.
Padrão Factory? 34
Padrão Factory? Factory Method Abstract Factory 35
FactoryMethod 36
Era uma vez um “new”... 37
Factory Method 38
Factory Method – criador e produto abstractclassGerenciadorDeConexoes { publicabstractConexaoObterConexao(); } abstractclassConexao { } 39 Factory Method
Factory Method – SQL Server classGerenciadorDeConexoesSqlServer : GerenciadorDeConexoes { publicoverrideConexaoObterConexao()     { returnnewConexaoSqlServer();     } } classConexaoSqlServer : Conexao { } 40
Factory Method – SQL Compact classGerenciadorDeConexoesSqlCompact : GerenciadorDeConexoes { publicoverrideConexaoObterConexao()     { returnnewConexaoSqlCompact();     } } classConexaoSqlCompact : Conexao { } 41
Simple Factory – Não confundir classGerenciadorDeConexoesSuperAcoplado { publicConexaoObterConexao()     { //if (blablabla...) returnnewConexaoSqlServer(); //else (xyz...) returnnewConexaoSqlCompact();     } } 42
43 “ O Factory Method define uma interface para criar um objeto, mas deixa as subclasses decidirem qual classe instanciar. O Factory Method permite a uma classe adiar a instanciação às subclasses.
Abstract Factory 44
Abstract Factory 45
Abstract Factory no .Net Framework 46
Abstract Factory – no .Net Framework classCliente{ publicvoidFazAlgumaCoisa() { vardbProviderFactory=  DbProviderFactories.GetFactory("System.Data.OleDb"); var command = dbProviderFactory.CreateCommand(); var connection = dbProviderFactory.CreateConnection(); //fazalgumacoisa... } } 47
48 “ O Abstract Factory fornece uma interface para criação de famílias de objetos relacionados ou dependentes sem especificar suas classes concretas.
Singleton 49
Singleton 50
Singleton – Simples classSingleton { privatestaticreadonlySingleton _instancia = newSingleton(); private Singleton() { } publicstaticSingletonInstancia     { get         { return _instancia;         }     } } 51
Singleton – Simples classSingleton { privatestaticreadonlySingleton _instancia = newSingleton(); private Singleton() { } publicstaticSingletonInstancia     { get         { return _instancia;         }     } } 52 Construtor
Singleton – Sincronizado classSingleton { privatestaticSingleton _instancia; private Singleton() { } publicstaticSingletonInstancia     { get         { if (_instancia == null) lock (typeof(Singleton)) if (_instancia == null)                         _instancia = newSingleton(); return _instancia;         }     } } 53
Cuidado! 54 Singletons podem ser perigosos...
55 Singleton desnecessário Estado global Anti-pattern? Reversão difícil Maisdifíciltestar Podeserquebrado…
Alternativas: 56
57 “ O padrão Singleton garante que uma classe possui apenas uma instância, e provê um ponto de acesso global a ela.
Padrões de Arquitetura 58
59
Alguns padrões de arquitetura (1) 60 http://martinfowler.com/eaaCatalog/
Alguns padrões de arquitetura (2) 61 http://martinfowler.com/eaaCatalog/
Conclusões 62
63 Patterns Cop
64
Patterns Crazy
66
Mais informações Design Patterns: http://dofactory.com/Patterns/Patterns.aspxhttp://en.wikipedia.org/wiki/Design_Patterns Padrões de Arquitetura (Fowler):http://martinfowler.com/eaaCatalog .Net Unplugged:http://unplugged.giggio.net/?tag=/design+patterns Na MSDN Magazine:http://tinyurl.com/msdnmagdp1http://tinyurl.com/msdnmagdp2
68 Obrigado!

Mais conteúdo relacionado

Mais procurados

Padrões-10 - Padrões Criacionais - Singleton
Padrões-10 - Padrões Criacionais - SingletonPadrões-10 - Padrões Criacionais - Singleton
Padrões-10 - Padrões Criacionais - SingletonEduardo Nicola F. Zagari
 
Padrões-09 - Padrões Criacionais - Factory Method
Padrões-09 - Padrões Criacionais - Factory MethodPadrões-09 - Padrões Criacionais - Factory Method
Padrões-09 - Padrões Criacionais - Factory MethodEduardo Nicola F. Zagari
 
Test-Driven Development (TDD) utilizando o framework xUnit.net
Test-Driven Development (TDD) utilizando o framework xUnit.netTest-Driven Development (TDD) utilizando o framework xUnit.net
Test-Driven Development (TDD) utilizando o framework xUnit.netRenato Groff
 
Testes Unitários/Integrados
Testes Unitários/IntegradosTestes Unitários/Integrados
Testes Unitários/IntegradosGiovanni Bassi
 
An Aspect-Oriented Infrastructure for Design by Contract in Java
An Aspect-Oriented Infrastructure for Design by Contract in JavaAn Aspect-Oriented Infrastructure for Design by Contract in Java
An Aspect-Oriented Infrastructure for Design by Contract in Javasagostinho
 

Mais procurados (6)

Padrões-10 - Padrões Criacionais - Singleton
Padrões-10 - Padrões Criacionais - SingletonPadrões-10 - Padrões Criacionais - Singleton
Padrões-10 - Padrões Criacionais - Singleton
 
Padrões-09 - Padrões Criacionais - Factory Method
Padrões-09 - Padrões Criacionais - Factory MethodPadrões-09 - Padrões Criacionais - Factory Method
Padrões-09 - Padrões Criacionais - Factory Method
 
Test-Driven Development (TDD) utilizando o framework xUnit.net
Test-Driven Development (TDD) utilizando o framework xUnit.netTest-Driven Development (TDD) utilizando o framework xUnit.net
Test-Driven Development (TDD) utilizando o framework xUnit.net
 
Testes Unitários/Integrados
Testes Unitários/IntegradosTestes Unitários/Integrados
Testes Unitários/Integrados
 
An Aspect-Oriented Infrastructure for Design by Contract in Java
An Aspect-Oriented Infrastructure for Design by Contract in JavaAn Aspect-Oriented Infrastructure for Design by Contract in Java
An Aspect-Oriented Infrastructure for Design by Contract in Java
 
Padrões de projeto
Padrões de projetoPadrões de projeto
Padrões de projeto
 

Destaque

TTC - Theme Scavenger Hunt
TTC - Theme Scavenger HuntTTC - Theme Scavenger Hunt
TTC - Theme Scavenger HuntJeanette Murphy
 
Marketing Communications Spring 2008 Final Project
Marketing Communications Spring 2008 Final ProjectMarketing Communications Spring 2008 Final Project
Marketing Communications Spring 2008 Final Projectlat886
 
Mobilizing Communities in a Connected Age
Mobilizing Communities in a Connected AgeMobilizing Communities in a Connected Age
Mobilizing Communities in a Connected AgeMargaret Stangl
 
Educational Tear Sheets
Educational Tear SheetsEducational Tear Sheets
Educational Tear Sheetssararshea
 
The Crossroads of dichtbij.nl
The Crossroads of dichtbij.nlThe Crossroads of dichtbij.nl
The Crossroads of dichtbij.nlBart Brouwers
 
Bm Kertas1 Set2
Bm Kertas1 Set2Bm Kertas1 Set2
Bm Kertas1 Set2Kay Aniza
 
TTE - Six Word Digital Memoirs - Nature
TTE - Six Word Digital Memoirs - NatureTTE - Six Word Digital Memoirs - Nature
TTE - Six Word Digital Memoirs - NatureJeanette Murphy
 
Trabajo colaborativo speaking
Trabajo colaborativo speakingTrabajo colaborativo speaking
Trabajo colaborativo speakingnelcho2002
 
LinkedIn - Active Networking For Career Advancement Revised 2 21 11
LinkedIn - Active Networking For Career Advancement   Revised 2 21 11LinkedIn - Active Networking For Career Advancement   Revised 2 21 11
LinkedIn - Active Networking For Career Advancement Revised 2 21 11mythicgroup
 
Lean back to Lean forward: steps to a new attitude
Lean back to Lean forward: steps to a new attitudeLean back to Lean forward: steps to a new attitude
Lean back to Lean forward: steps to a new attitudemiguelvinagre
 
Amphibians.d (1)
Amphibians.d (1)Amphibians.d (1)
Amphibians.d (1)Isabel Rojo
 
Pmr Bm Skema Jawapan Set 3
Pmr Bm Skema Jawapan Set 3Pmr Bm Skema Jawapan Set 3
Pmr Bm Skema Jawapan Set 3Kay Aniza
 
C:\documents and settings\beheerder\my documents\hyperlocal\10rules
C:\documents and settings\beheerder\my documents\hyperlocal\10rulesC:\documents and settings\beheerder\my documents\hyperlocal\10rules
C:\documents and settings\beheerder\my documents\hyperlocal\10rulesBart Brouwers
 
Harsh Computing Environments in Financial Services Markets
Harsh Computing Environments in Financial Services MarketsHarsh Computing Environments in Financial Services Markets
Harsh Computing Environments in Financial Services MarketsDan Armstrong
 

Destaque (20)

It Idea
It IdeaIt Idea
It Idea
 
TTC - Theme Scavenger Hunt
TTC - Theme Scavenger HuntTTC - Theme Scavenger Hunt
TTC - Theme Scavenger Hunt
 
Marketing Communications Spring 2008 Final Project
Marketing Communications Spring 2008 Final ProjectMarketing Communications Spring 2008 Final Project
Marketing Communications Spring 2008 Final Project
 
Mobilizing Communities in a Connected Age
Mobilizing Communities in a Connected AgeMobilizing Communities in a Connected Age
Mobilizing Communities in a Connected Age
 
Educational Tear Sheets
Educational Tear SheetsEducational Tear Sheets
Educational Tear Sheets
 
Question Matrix
Question MatrixQuestion Matrix
Question Matrix
 
The Crossroads of dichtbij.nl
The Crossroads of dichtbij.nlThe Crossroads of dichtbij.nl
The Crossroads of dichtbij.nl
 
Bm Kertas1 Set2
Bm Kertas1 Set2Bm Kertas1 Set2
Bm Kertas1 Set2
 
Uploaden
Uploaden Uploaden
Uploaden
 
TTE - Six Word Digital Memoirs - Nature
TTE - Six Word Digital Memoirs - NatureTTE - Six Word Digital Memoirs - Nature
TTE - Six Word Digital Memoirs - Nature
 
Trabajo colaborativo speaking
Trabajo colaborativo speakingTrabajo colaborativo speaking
Trabajo colaborativo speaking
 
One 2 One
One 2  OneOne 2  One
One 2 One
 
Texas Instruments
Texas InstrumentsTexas Instruments
Texas Instruments
 
LinkedIn - Active Networking For Career Advancement Revised 2 21 11
LinkedIn - Active Networking For Career Advancement   Revised 2 21 11LinkedIn - Active Networking For Career Advancement   Revised 2 21 11
LinkedIn - Active Networking For Career Advancement Revised 2 21 11
 
Lean back to Lean forward: steps to a new attitude
Lean back to Lean forward: steps to a new attitudeLean back to Lean forward: steps to a new attitude
Lean back to Lean forward: steps to a new attitude
 
Amphibians.d (1)
Amphibians.d (1)Amphibians.d (1)
Amphibians.d (1)
 
Pmr Bm Skema Jawapan Set 3
Pmr Bm Skema Jawapan Set 3Pmr Bm Skema Jawapan Set 3
Pmr Bm Skema Jawapan Set 3
 
E Learners Presentation
E Learners PresentationE Learners Presentation
E Learners Presentation
 
C:\documents and settings\beheerder\my documents\hyperlocal\10rules
C:\documents and settings\beheerder\my documents\hyperlocal\10rulesC:\documents and settings\beheerder\my documents\hyperlocal\10rules
C:\documents and settings\beheerder\my documents\hyperlocal\10rules
 
Harsh Computing Environments in Financial Services Markets
Harsh Computing Environments in Financial Services MarketsHarsh Computing Environments in Financial Services Markets
Harsh Computing Environments in Financial Services Markets
 

Semelhante a Padrões de design no .NET Framework em 5 minutos

Android: testes automatizados e TDD
Android: testes automatizados e TDDAndroid: testes automatizados e TDD
Android: testes automatizados e TDDDextra
 
Estratégias de Refatoração: além do be-a-bá
Estratégias de Refatoração: além do be-a-báEstratégias de Refatoração: além do be-a-bá
Estratégias de Refatoração: além do be-a-báDanilo Sato
 
Intro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverIntro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverEduardo Jorge
 
Palestra MVC - Online tech day 2010
Palestra MVC - Online tech day 2010Palestra MVC - Online tech day 2010
Palestra MVC - Online tech day 2010Alexandre Tarifa
 
qualidade de código: boas práticas, princípios e padrões
qualidade de código: boas práticas, princípios e padrõesqualidade de código: boas práticas, princípios e padrões
qualidade de código: boas práticas, princípios e padrõesedgarddavidson.com
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...tdc-globalcode
 
Algoritmos e Estruturas de Dados, edição de 2013/2014
Algoritmos e Estruturas de Dados, edição de 2013/2014Algoritmos e Estruturas de Dados, edição de 2013/2014
Algoritmos e Estruturas de Dados, edição de 2013/2014Pedro Guerreiro
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHGiovanni Bassi
 
Apresentação Gerpro
Apresentação GerproApresentação Gerpro
Apresentação Gerprorafahreis
 
Webinar: Uma introdução a ISA RISC-V e seu ecossistema
Webinar: Uma introdução a ISA RISC-V e seu ecossistemaWebinar: Uma introdução a ISA RISC-V e seu ecossistema
Webinar: Uma introdução a ISA RISC-V e seu ecossistemaEmbarcados
 
Teste unitário
Teste unitárioTeste unitário
Teste unitáriodist_bp
 
Padrões de deploy para DevOps e Entrega Contínua
Padrões de deploy para DevOps e Entrega ContínuaPadrões de deploy para DevOps e Entrega Contínua
Padrões de deploy para DevOps e Entrega ContínuaDanilo Sato
 
Estratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de VersãoEstratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de VersãoComunidade NetPonto
 
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como CódigoCurso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como CódigoGuilhermeJorgeAragod
 

Semelhante a Padrões de design no .NET Framework em 5 minutos (20)

Android: testes automatizados e TDD
Android: testes automatizados e TDDAndroid: testes automatizados e TDD
Android: testes automatizados e TDD
 
Estratégias de Refatoração: além do be-a-bá
Estratégias de Refatoração: além do be-a-báEstratégias de Refatoração: além do be-a-bá
Estratégias de Refatoração: além do be-a-bá
 
Intro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverIntro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserver
 
Palestra MVC - Online tech day 2010
Palestra MVC - Online tech day 2010Palestra MVC - Online tech day 2010
Palestra MVC - Online tech day 2010
 
qualidade de código: boas práticas, princípios e padrões
qualidade de código: boas práticas, princípios e padrõesqualidade de código: boas práticas, princípios e padrões
qualidade de código: boas práticas, princípios e padrões
 
Code Smells
Code SmellsCode Smells
Code Smells
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
Padrão de Projeto Facade
Padrão de Projeto FacadePadrão de Projeto Facade
Padrão de Projeto Facade
 
Algoritmos e Estruturas de Dados, edição de 2013/2014
Algoritmos e Estruturas de Dados, edição de 2013/2014Algoritmos e Estruturas de Dados, edição de 2013/2014
Algoritmos e Estruturas de Dados, edição de 2013/2014
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BH
 
Introdução Play framework
Introdução Play frameworkIntrodução Play framework
Introdução Play framework
 
Apresentação Gerpro
Apresentação GerproApresentação Gerpro
Apresentação Gerpro
 
Webinar: Uma introdução a ISA RISC-V e seu ecossistema
Webinar: Uma introdução a ISA RISC-V e seu ecossistemaWebinar: Uma introdução a ISA RISC-V e seu ecossistema
Webinar: Uma introdução a ISA RISC-V e seu ecossistema
 
Padrões MVC
Padrões MVCPadrões MVC
Padrões MVC
 
Teste unitário
Teste unitárioTeste unitário
Teste unitário
 
Padrões de deploy para DevOps e Entrega Contínua
Padrões de deploy para DevOps e Entrega ContínuaPadrões de deploy para DevOps e Entrega Contínua
Padrões de deploy para DevOps e Entrega Contínua
 
Artoolkit vs2005 v1.0
Artoolkit vs2005 v1.0Artoolkit vs2005 v1.0
Artoolkit vs2005 v1.0
 
Estratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de VersãoEstratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de Versão
 
Projeto de Software
Projeto de SoftwareProjeto de Software
Projeto de Software
 
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como CódigoCurso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
 

Mais de Giovanni Bassi

O que aprendi montando a arquitetura de microsserviços
O que aprendi montando a arquitetura de microsserviçosO que aprendi montando a arquitetura de microsserviços
O que aprendi montando a arquitetura de microsserviçosGiovanni Bassi
 
Analisando dumps de memória de aplicações .NET
Analisando dumps de memória de aplicações .NETAnalisando dumps de memória de aplicações .NET
Analisando dumps de memória de aplicações .NETGiovanni Bassi
 
Async e await com JavaScript: entenda e use agora
Async e await com JavaScript: entenda e use agoraAsync e await com JavaScript: entenda e use agora
Async e await com JavaScript: entenda e use agoraGiovanni Bassi
 
Conhecendo o AKS, o azure container services com kubernetes
Conhecendo o AKS, o azure container services com kubernetesConhecendo o AKS, o azure container services com kubernetes
Conhecendo o AKS, o azure container services com kubernetesGiovanni Bassi
 
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1Giovanni Bassi
 
C#7, 7.1, 7.2, 7.3 e C# 8
C#7, 7.1, 7.2, 7.3 e C# 8C#7, 7.1, 7.2, 7.3 e C# 8
C#7, 7.1, 7.2, 7.3 e C# 8Giovanni Bassi
 
Engenharia ágil de ponta a ponta do clone ao deploy
Engenharia ágil de ponta a ponta do clone ao deployEngenharia ágil de ponta a ponta do clone ao deploy
Engenharia ágil de ponta a ponta do clone ao deployGiovanni Bassi
 
Entrega contínua fica mais fácil com contêineres
Entrega contínua fica mais fácil com contêineresEntrega contínua fica mais fácil com contêineres
Entrega contínua fica mais fácil com contêineresGiovanni Bassi
 
.NET Core, ASP.NET Core e .NET Standard 2
.NET Core, ASP.NET Core e .NET Standard 2.NET Core, ASP.NET Core e .NET Standard 2
.NET Core, ASP.NET Core e .NET Standard 2Giovanni Bassi
 
.NET com contêineres Windows e Linux
.NET com contêineres Windows e Linux.NET com contêineres Windows e Linux
.NET com contêineres Windows e LinuxGiovanni Bassi
 
Async e await com JavaScript: entenda e use agora
Async e await com JavaScript: entenda e use agoraAsync e await com JavaScript: entenda e use agora
Async e await com JavaScript: entenda e use agoraGiovanni Bassi
 
Compartilhando código entre frontend e backend com Node.js
Compartilhando código entre frontend e backend com Node.jsCompartilhando código entre frontend e backend com Node.js
Compartilhando código entre frontend e backend com Node.jsGiovanni Bassi
 
Construindo uma ferramenta CLI multiplataforma com Node.js
Construindo uma ferramenta CLI multiplataforma com Node.jsConstruindo uma ferramenta CLI multiplataforma com Node.js
Construindo uma ferramenta CLI multiplataforma com Node.jsGiovanni Bassi
 
Um mergulho nos containers windows
Um mergulho nos containers windowsUm mergulho nos containers windows
Um mergulho nos containers windowsGiovanni Bassi
 
Por dentro do .NET Core
Por dentro do .NET CorePor dentro do .NET Core
Por dentro do .NET CoreGiovanni Bassi
 
Build e release pipeline com docker
Build e release pipeline com dockerBuild e release pipeline com docker
Build e release pipeline com dockerGiovanni Bassi
 
Release contínuo de um microsserviço com Docker ASP.net core e Azure Containe...
Release contínuo de um microsserviço com Docker ASP.net core e Azure Containe...Release contínuo de um microsserviço com Docker ASP.net core e Azure Containe...
Release contínuo de um microsserviço com Docker ASP.net core e Azure Containe...Giovanni Bassi
 

Mais de Giovanni Bassi (20)

O que aprendi montando a arquitetura de microsserviços
O que aprendi montando a arquitetura de microsserviçosO que aprendi montando a arquitetura de microsserviços
O que aprendi montando a arquitetura de microsserviços
 
Sendo ágil com git
Sendo ágil com gitSendo ágil com git
Sendo ágil com git
 
Analisando dumps de memória de aplicações .NET
Analisando dumps de memória de aplicações .NETAnalisando dumps de memória de aplicações .NET
Analisando dumps de memória de aplicações .NET
 
Novidades do c# 7 e 8
Novidades do c# 7 e 8Novidades do c# 7 e 8
Novidades do c# 7 e 8
 
Async e await com JavaScript: entenda e use agora
Async e await com JavaScript: entenda e use agoraAsync e await com JavaScript: entenda e use agora
Async e await com JavaScript: entenda e use agora
 
Conhecendo o AKS, o azure container services com kubernetes
Conhecendo o AKS, o azure container services com kubernetesConhecendo o AKS, o azure container services com kubernetes
Conhecendo o AKS, o azure container services com kubernetes
 
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
 
C#7, 7.1, 7.2, 7.3 e C# 8
C#7, 7.1, 7.2, 7.3 e C# 8C#7, 7.1, 7.2, 7.3 e C# 8
C#7, 7.1, 7.2, 7.3 e C# 8
 
Engenharia ágil de ponta a ponta do clone ao deploy
Engenharia ágil de ponta a ponta do clone ao deployEngenharia ágil de ponta a ponta do clone ao deploy
Engenharia ágil de ponta a ponta do clone ao deploy
 
Entrega contínua fica mais fácil com contêineres
Entrega contínua fica mais fácil com contêineresEntrega contínua fica mais fácil com contêineres
Entrega contínua fica mais fácil com contêineres
 
.NET Core, ASP.NET Core e .NET Standard 2
.NET Core, ASP.NET Core e .NET Standard 2.NET Core, ASP.NET Core e .NET Standard 2
.NET Core, ASP.NET Core e .NET Standard 2
 
.NET com contêineres Windows e Linux
.NET com contêineres Windows e Linux.NET com contêineres Windows e Linux
.NET com contêineres Windows e Linux
 
Async e await com JavaScript: entenda e use agora
Async e await com JavaScript: entenda e use agoraAsync e await com JavaScript: entenda e use agora
Async e await com JavaScript: entenda e use agora
 
Compartilhando código entre frontend e backend com Node.js
Compartilhando código entre frontend e backend com Node.jsCompartilhando código entre frontend e backend com Node.js
Compartilhando código entre frontend e backend com Node.js
 
Construindo uma ferramenta CLI multiplataforma com Node.js
Construindo uma ferramenta CLI multiplataforma com Node.jsConstruindo uma ferramenta CLI multiplataforma com Node.js
Construindo uma ferramenta CLI multiplataforma com Node.js
 
O Futuro do C#: C#8
O Futuro do C#: C#8O Futuro do C#: C#8
O Futuro do C#: C#8
 
Um mergulho nos containers windows
Um mergulho nos containers windowsUm mergulho nos containers windows
Um mergulho nos containers windows
 
Por dentro do .NET Core
Por dentro do .NET CorePor dentro do .NET Core
Por dentro do .NET Core
 
Build e release pipeline com docker
Build e release pipeline com dockerBuild e release pipeline com docker
Build e release pipeline com docker
 
Release contínuo de um microsserviço com Docker ASP.net core e Azure Containe...
Release contínuo de um microsserviço com Docker ASP.net core e Azure Containe...Release contínuo de um microsserviço com Docker ASP.net core e Azure Containe...
Release contínuo de um microsserviço com Docker ASP.net core e Azure Containe...
 

Padrões de design no .NET Framework em 5 minutos

  • 1. Padrões de design no .NET Framework Giovanni Bassi ConsultorIndependente Microsoft MVP C# 26/01/2010
  • 2. Ou...5 Padrões em 50 minutos 2
  • 4.
  • 8. Quando você começa a estudar padrões de projeto 7
  • 9. 8
  • 11. 10
  • 12. 11
  • 13. 12
  • 14. Alguns padrões de projeto 13 Na wikipedia: http://tinyurl.com/dpwiki
  • 17. Strategy – código publicclassContexto { publicEstrategiaEstrategia { get; set; } } publicabstractclassEstrategia { } publicclassEstrategiaConcreta1 : Estrategia { } publicclassEstrategiaConcreta2 : Estrategia { } 16 Poderia ser uma Interface
  • 18. Strategy – código classController { publicIRepositorioRepositorio { get; set; } publicvoidExcluir(Entidadeentidade) { Repositorio.Excluir(entidade.Id); } } interfaceIrepositorio { voidExcluir(int id); } 17
  • 19. Strategy – repositório SQL Server classRepositorioSQLServer : Irepositorio { publicvoidExcluir(int id) { //altera o banco de dados } } 18
  • 20. Strategy – repositório XML classRepositorioXml : Irepositorio { publicvoidExcluir(int id) { //altera o xml } } 19
  • 21. Strategy – repositório para testes classRepositorioFalso : IRepositorio { publicboolChamouExcluir; publicintIdChamado; publicvoidExcluir(int id) { ChamouExcluir = true; IdChamado = id; } } 20
  • 22. 21 “ Definaumafamília de algoritmos, encapsulecada um, e torne-osintercambiáveis. Strategy permiteque o algoritmovarieindependente dos clientesque o utilizam.
  • 23. 22 Encapsule e separe o que muda
  • 25.
  • 26. Você deve ser capaz de estender uma classe sem modificá-la
  • 27. Separe o pode mudar do que não deve mudar
  • 28.
  • 31. Template Method – código abstractclassTransferencia { publicvoidTransferir() { Debitar(); Creditar(); AcoesPosLancamento(); } protectedvirtualvoidAcoesPosLancamento(){ } protectedabstractvoidCreditar(); protectedabstractvoidDebitar(); } 28 Template Method
  • 32. Template Method– código abstractclassTransferencia { publicvoidTransferir() { Debitar(); Creditar(); AcoesPosLancamento(); } protectedvirtualvoidAcoesPosLancamento(){ } protectedabstractvoidCreditar(); protectedabstractvoidDebitar(); } 29 Algoritmo encapsulado
  • 33. Template Method– código abstractclassTransferencia { publicvoidTransferir() { Debitar(); Creditar(); AcoesPosLancamento(); } protectedvirtualvoidAcoesPosLancamento(){ } protectedabstractvoidCreditar(); protectedabstractvoidDebitar(); } 30 Gancho
  • 34. Template Method – Transferência interna classTransferenciaInterna : Transferencia { protectedoverridevoidCreditar() { //creditarcontainterna } protectedoverridevoidDebitar() { //debitarcontainterna } } 31
  • 35. Template Method – DOC classDOC : Transferencia { protectedoverridevoidCreditar() { //creditarbanco de destino } protectedoverridevoidDebitar() { //debitarbanco local } protectedoverridevoidAcoesPosLancamento() { //notificarbanco de destino, etc... } } 32
  • 36. 33 “ Define um esqueleto de algoritmos em um método, delegando alguns passos a subclasses. O método permite que subclasses redefinam alguns passos de um algoritmo sem mudar a estrutura do algoritmo.
  • 38. Padrão Factory? Factory Method Abstract Factory 35
  • 40. Era uma vez um “new”... 37
  • 42. Factory Method – criador e produto abstractclassGerenciadorDeConexoes { publicabstractConexaoObterConexao(); } abstractclassConexao { } 39 Factory Method
  • 43. Factory Method – SQL Server classGerenciadorDeConexoesSqlServer : GerenciadorDeConexoes { publicoverrideConexaoObterConexao() { returnnewConexaoSqlServer(); } } classConexaoSqlServer : Conexao { } 40
  • 44. Factory Method – SQL Compact classGerenciadorDeConexoesSqlCompact : GerenciadorDeConexoes { publicoverrideConexaoObterConexao() { returnnewConexaoSqlCompact(); } } classConexaoSqlCompact : Conexao { } 41
  • 45. Simple Factory – Não confundir classGerenciadorDeConexoesSuperAcoplado { publicConexaoObterConexao() { //if (blablabla...) returnnewConexaoSqlServer(); //else (xyz...) returnnewConexaoSqlCompact(); } } 42
  • 46. 43 “ O Factory Method define uma interface para criar um objeto, mas deixa as subclasses decidirem qual classe instanciar. O Factory Method permite a uma classe adiar a instanciação às subclasses.
  • 49. Abstract Factory no .Net Framework 46
  • 50. Abstract Factory – no .Net Framework classCliente{ publicvoidFazAlgumaCoisa() { vardbProviderFactory= DbProviderFactories.GetFactory("System.Data.OleDb"); var command = dbProviderFactory.CreateCommand(); var connection = dbProviderFactory.CreateConnection(); //fazalgumacoisa... } } 47
  • 51. 48 “ O Abstract Factory fornece uma interface para criação de famílias de objetos relacionados ou dependentes sem especificar suas classes concretas.
  • 54. Singleton – Simples classSingleton { privatestaticreadonlySingleton _instancia = newSingleton(); private Singleton() { } publicstaticSingletonInstancia { get { return _instancia; } } } 51
  • 55. Singleton – Simples classSingleton { privatestaticreadonlySingleton _instancia = newSingleton(); private Singleton() { } publicstaticSingletonInstancia { get { return _instancia; } } } 52 Construtor
  • 56. Singleton – Sincronizado classSingleton { privatestaticSingleton _instancia; private Singleton() { } publicstaticSingletonInstancia { get { if (_instancia == null) lock (typeof(Singleton)) if (_instancia == null) _instancia = newSingleton(); return _instancia; } } } 53
  • 57. Cuidado! 54 Singletons podem ser perigosos...
  • 58. 55 Singleton desnecessário Estado global Anti-pattern? Reversão difícil Maisdifíciltestar Podeserquebrado…
  • 60. 57 “ O padrão Singleton garante que uma classe possui apenas uma instância, e provê um ponto de acesso global a ela.
  • 62. 59
  • 63. Alguns padrões de arquitetura (1) 60 http://martinfowler.com/eaaCatalog/
  • 64. Alguns padrões de arquitetura (2) 61 http://martinfowler.com/eaaCatalog/
  • 67. 64
  • 69. 66
  • 70. Mais informações Design Patterns: http://dofactory.com/Patterns/Patterns.aspxhttp://en.wikipedia.org/wiki/Design_Patterns Padrões de Arquitetura (Fowler):http://martinfowler.com/eaaCatalog .Net Unplugged:http://unplugged.giggio.net/?tag=/design+patterns Na MSDN Magazine:http://tinyurl.com/msdnmagdp1http://tinyurl.com/msdnmagdp2
  • 73.
  • 75. © 2009 Microsoft Corporation. All rights reserved. Microsoft, MSDN, the MSDN logo, and [list other trademarks referenced] are trademarks of the Microsoft group of companies.   The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation.  Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation.  MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED, OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.