SlideShare uma empresa Scribd logo
Padrões de design no .NET FrameworkGiovanni BassiConsultorIndependenteMicrosoft MVP C#26/01/2010
Ou...5 Padrões em 50 minutos2
Giovanni Bassi
Online @Giovanni BassiEmail: 		giggio@giggio.netBlog:		unplugged.giggio.netSite: 		giovannibassi.comTwitter: 	@giovannibassi
.Net ArchitectsGrupo:		www.dotnetarchitects.netPodcast:	podcast.dotnetarchitects.netOnline: 	tinyurl.com/DotNetArchDojo:		dojo.dotnetarchitects.netTwitter: 	#DotNetArchitects@NetArchitects4
Agenda5
Padrões de Projeto6
Quando você começa a estudar padrões de projeto7
8
9Alguémjápensounisso antes!
10
11
12
Alguns padrões de projeto13Na wikipedia: http://tinyurl.com/dpwiki
Strategy (ou Policy)14
Strategy15
Strategy – códigopublicclassContexto{publicEstrategiaEstrategia { get; set; }}publicabstractclassEstrategia{}publicclassEstrategiaConcreta1 : Estrategia{}publicclassEstrategiaConcreta2 : Estrategia{}16Poderia ser uma Interface
Strategy – códigoclassController {publicIRepositorioRepositorio { get; set; }publicvoidExcluir(Entidadeentidade)    {Repositorio.Excluir(entidade.Id);    }}interfaceIrepositorio{voidExcluir(int id);}17
Strategy – repositório SQL ServerclassRepositorioSQLServer : Irepositorio{publicvoidExcluir(int id){ //altera o banco de dados }}18
Strategy – repositório XMLclassRepositorioXml : Irepositorio{publicvoidExcluir(int id){//altera o xml}}19
Strategy – repositório para testesclassRepositorioFalso : 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.
22Encapsule e separe o que muda
23“Policy”?(“Política”?)
24Princípio SOLIDOpen ClosedPrinciplePrincípio aberto fechado“Entidades de software (classes, módulos, funções, etc) devem ser abertasparaextensãomasfechadasparamodificações” – Bertrand Meyer (1988)
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çõesTemplateMethod25
Template Method26
Template Method27
Template Method – códigoabstractclassTransferencia{publicvoidTransferir(){Debitar();Creditar();AcoesPosLancamento();}protectedvirtualvoidAcoesPosLancamento(){ }protectedabstractvoidCreditar();protectedabstractvoidDebitar();}28Template Method
Template Method– códigoabstractclassTransferencia{publicvoidTransferir(){Debitar();Creditar();AcoesPosLancamento();}protectedvirtualvoidAcoesPosLancamento(){ }protectedabstractvoidCreditar();protectedabstractvoidDebitar();}29Algoritmo encapsulado
Template Method– códigoabstractclassTransferencia{publicvoidTransferir(){Debitar();Creditar();AcoesPosLancamento();}protectedvirtualvoidAcoesPosLancamento(){ }protectedabstractvoidCreditar();protectedabstractvoidDebitar();}30Gancho
Template Method – Transferência internaclassTransferenciaInterna : Transferencia{protectedoverridevoidCreditar()    {//creditarcontainterna    }protectedoverridevoidDebitar()    {//debitarcontainterna    }}31
Template Method – DOCclassDOC : 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 MethodAbstract Factory35
FactoryMethod36
Era uma vez um “new”...37
Factory Method38
Factory Method – criador e produtoabstractclassGerenciadorDeConexoes{publicabstractConexaoObterConexao();}abstractclassConexao{}39Factory Method
Factory Method – SQL ServerclassGerenciadorDeConexoesSqlServer : GerenciadorDeConexoes{publicoverrideConexaoObterConexao()    {returnnewConexaoSqlServer();    }}classConexaoSqlServer : Conexao{}40
Factory Method – SQL CompactclassGerenciadorDeConexoesSqlCompact : GerenciadorDeConexoes{publicoverrideConexaoObterConexao()    {returnnewConexaoSqlCompact();    }}classConexaoSqlCompact : Conexao{}41
Simple Factory – Não confundirclassGerenciadorDeConexoesSuperAcoplado{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 Factory44
Abstract Factory45
Abstract Factory no .Net Framework46
Abstract Factory – no .Net FrameworkclassCliente{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.
Singleton49
Singleton50
Singleton – SimplesclassSingleton{privatestaticreadonlySingleton _instancia = newSingleton();private Singleton() { }publicstaticSingletonInstancia    {get        {return _instancia;        }    }}51
Singleton – SimplesclassSingleton{privatestaticreadonlySingleton _instancia = newSingleton();private Singleton() { }publicstaticSingletonInstancia    {get        {return _instancia;        }    }}52Construtor
Singleton – SincronizadoclassSingleton {privatestaticSingleton _instancia;private Singleton() { }publicstaticSingletonInstancia    {get        {if (_instancia == null)lock (typeof(Singleton))if (_instancia == null)                        _instancia = newSingleton();return _instancia;        }    }}53
Cuidado!54Singletons podem ser perigosos...
55Singleton desnecessárioEstado globalAnti-pattern?Reversão difícilMaisdifíciltestarPodeserquebrado…
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 Arquitetura58
59
Alguns padrões de arquitetura (1)60http://martinfowler.com/eaaCatalog/
Alguns padrões de arquitetura (2)61http://martinfowler.com/eaaCatalog/
Conclusões62
63Patterns Cop
64
Patterns Crazy
66
Mais informaçõesDesign Patterns: http://dofactory.com/Patterns/Patterns.aspxhttp://en.wikipedia.org/wiki/Design_PatternsPadrões de Arquitetura (Fowler):http://martinfowler.com/eaaCatalog.Net Unplugged:http://unplugged.giggio.net/?tag=/design+patternsNa MSDN Magazine:http://tinyurl.com/msdnmagdp1http://tinyurl.com/msdnmagdp2
68Obrigado!

Mais conteúdo relacionado

PDF
Design patterns de uma vez por todas
PDF
Sistemas de Recomendação com Neo4j + Surprise
PPT
Gof design patterns
PDF
Arquitetura Hexagonal: uma introdução
PDF
Programação OO - Java
PDF
JUnit - Selenium
PDF
Clean code part 2
Design patterns de uma vez por todas
Sistemas de Recomendação com Neo4j + Surprise
Gof design patterns
Arquitetura Hexagonal: uma introdução
Programação OO - Java
JUnit - Selenium
Clean code part 2

Mais procurados (6)

PDF
Padrões-10 - Padrões Criacionais - Singleton
PDF
Padrões-09 - Padrões Criacionais - Factory Method
PPTX
Test-Driven Development (TDD) utilizando o framework xUnit.net
PPTX
Testes Unitários/Integrados
PPT
An Aspect-Oriented Infrastructure for Design by Contract in Java
PDF
Padrões de projeto
Padrões-10 - Padrões Criacionais - Singleton
Padrões-09 - Padrões Criacionais - Factory Method
Test-Driven Development (TDD) utilizando o framework xUnit.net
Testes Unitários/Integrados
An Aspect-Oriented Infrastructure for Design by Contract in Java
Padrões de projeto
Anúncio

Destaque (20)

PDF
PDF
TTC - Theme Scavenger Hunt
PPT
Marketing Communications Spring 2008 Final Project
PPT
Mobilizing Communities in a Connected Age
PDF
Educational Tear Sheets
PDF
Question Matrix
PDF
The Crossroads of dichtbij.nl
PDF
Bm Kertas1 Set2
PPTX
Uploaden
PDF
TTE - Six Word Digital Memoirs - Nature
PPT
Trabajo colaborativo speaking
PDF
PDF
Texas Instruments
PPT
LinkedIn - Active Networking For Career Advancement Revised 2 21 11
PDF
Lean back to Lean forward: steps to a new attitude
ODP
Amphibians.d (1)
PDF
Pmr Bm Skema Jawapan Set 3
PDF
E Learners Presentation
PPT
C:\documents and settings\beheerder\my documents\hyperlocal\10rules
PPTX
Harsh Computing Environments in Financial Services Markets
TTC - Theme Scavenger Hunt
Marketing Communications Spring 2008 Final Project
Mobilizing Communities in a Connected Age
Educational Tear Sheets
Question Matrix
The Crossroads of dichtbij.nl
Bm Kertas1 Set2
Uploaden
TTE - Six Word Digital Memoirs - Nature
Trabajo colaborativo speaking
Texas Instruments
LinkedIn - Active Networking For Career Advancement Revised 2 21 11
Lean back to Lean forward: steps to a new attitude
Amphibians.d (1)
Pmr Bm Skema Jawapan Set 3
E Learners Presentation
C:\documents and settings\beheerder\my documents\hyperlocal\10rules
Harsh Computing Environments in Financial Services Markets
Anúncio

Semelhante a Design Patterns (MSDN Webcast) (20)

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

Mais de Giovanni Bassi (20)

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

Último (16)

PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PDF
Processos na gestão de transportes, TM100 Col18
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PPTX
Arquitetura de computadores - Memórias Secundárias
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Custos e liquidação no SAP Transportation Management, TM130 Col18
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Processos na gestão de transportes, TM100 Col18
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
COBITxITIL-Entenda as diferença em uso governança TI
Arquitetura de computadores - Memórias Secundárias
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx

Design Patterns (MSDN Webcast)