padroes de desenho

46
Padr˜ oes de Projeto Humberto C Marchezi 22 de junho de 2012 Humberto C Marchezi () Padr˜ oes de Projeto 22 de junho de 2012 1 / 42

Upload: humberto-marchezi

Post on 09-Jul-2015

229 views

Category:

Technology


0 download

DESCRIPTION

Essa apresentação explica alguns tipos de padrões de desenho ( padrões de projeto ) relacionando com exemplos mais concretos.

TRANSCRIPT

Page 1: Padroes de desenho

Padroes de Projeto

Humberto C Marchezi

22 de junho de 2012

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 1 / 42

Page 2: Padroes de desenho

Conteudo

1 Conteudo

2 Apresentacao

3 Padroes de Projeto Estruturais

4 Padroes de Projeto Comportamentais

5 Padroes de Projeto Criacionais

6 Padroes de Projeto de Sistemas Empresariais

7 Referencias

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 2 / 42

Page 3: Padroes de desenho

Apresentacao

Padroes de Projeto

Solucao reutilizavel para um problema que ocorre de tempos emtempos

// Como eu f a c o para i s o l a r a tecnologiaXPTO do meu s i s t e m a ??MapaLoteTecnologiaXPTO mapa = new MapaLoteTecnologiaXPTO ( . . . ) ;. . .t h i s . mapa . S e l e c i o n a r L o t e ( codLote ) ;. . .t h i s . t x t I n s c r i c a o L o t e . Text = . . . ;. . .

Os padroes de projeto sao ideias provadas e testadas, prevenindo areinvencao da roda

Promovem a melhoria da comunicacao entre desenvolvedores

Muitos deles definem diferentes estrategias para se abstrair detalhesde implementacao

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 3 / 42

Page 4: Padroes de desenho

Apresentacao

Padroes de Projeto

Solucao reutilizavel para um problema que ocorre de tempos emtempos

// Como eu f a c o para i s o l a r a tecnologiaXPTO do meu s i s t e m a ??MapaLoteTecnologiaXPTO mapa = new MapaLoteTecnologiaXPTO ( . . . ) ;. . .t h i s . mapa . S e l e c i o n a r L o t e ( codLote ) ;. . .t h i s . t x t I n s c r i c a o L o t e . Text = . . . ;. . .

Os padroes de projeto sao ideias provadas e testadas, prevenindo areinvencao da roda

Promovem a melhoria da comunicacao entre desenvolvedores

Muitos deles definem diferentes estrategias para se abstrair detalhesde implementacao

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 3 / 42

Page 5: Padroes de desenho

Apresentacao

Padroes de Projeto

Solucao reutilizavel para um problema que ocorre de tempos emtempos

// Como eu f a c o para i s o l a r a tecnologiaXPTO do meu s i s t e m a ??MapaLoteTecnologiaXPTO mapa = new MapaLoteTecnologiaXPTO ( . . . ) ;. . .t h i s . mapa . S e l e c i o n a r L o t e ( codLote ) ;. . .t h i s . t x t I n s c r i c a o L o t e . Text = . . . ;. . .

Os padroes de projeto sao ideias provadas e testadas, prevenindo areinvencao da roda

Promovem a melhoria da comunicacao entre desenvolvedores

Muitos deles definem diferentes estrategias para se abstrair detalhesde implementacao

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 3 / 42

Page 6: Padroes de desenho

Apresentacao

Padroes de Projeto

Solucao reutilizavel para um problema que ocorre de tempos emtempos

// Como eu f a c o para i s o l a r a tecnologiaXPTO do meu s i s t e m a ??MapaLoteTecnologiaXPTO mapa = new MapaLoteTecnologiaXPTO ( . . . ) ;. . .t h i s . mapa . S e l e c i o n a r L o t e ( codLote ) ;. . .t h i s . t x t I n s c r i c a o L o t e . Text = . . . ;. . .

Os padroes de projeto sao ideias provadas e testadas, prevenindo areinvencao da roda

Promovem a melhoria da comunicacao entre desenvolvedores

Muitos deles definem diferentes estrategias para se abstrair detalhesde implementacao

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 3 / 42

Page 7: Padroes de desenho

Apresentacao

Padroes de Projeto

Solucao reutilizavel para um problema que ocorre de tempos emtempos

// Como eu f a c o para i s o l a r a tecnologiaXPTO do meu s i s t e m a ??MapaLoteTecnologiaXPTO mapa = new MapaLoteTecnologiaXPTO ( . . . ) ;. . .t h i s . mapa . S e l e c i o n a r L o t e ( codLote ) ;. . .t h i s . t x t I n s c r i c a o L o t e . Text = . . . ;. . .

Os padroes de projeto sao ideias provadas e testadas, prevenindo areinvencao da roda

Promovem a melhoria da comunicacao entre desenvolvedores

Muitos deles definem diferentes estrategias para se abstrair detalhesde implementacao

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 3 / 42

Page 8: Padroes de desenho

Apresentacao

Padroes de projeto desta apresentacao estao agrupados em:

Parte I - Padroes de Projeto Classicos

Padroes de Projeto EstruturaisPadroes de Projeto ComportamentaisPadroes de Projeto Criacionais

Parte II - Padroes de Projeto de Sistemas Empresariais

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 4 / 42

Page 9: Padroes de desenho

Padroes de Projeto Estruturais

1 Conteudo

2 Apresentacao

3 Padroes de Projeto Estruturais

4 Padroes de Projeto Comportamentais

5 Padroes de Projeto Criacionais

6 Padroes de Projeto de Sistemas Empresariais

7 Referencias

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 5 / 42

Page 10: Padroes de desenho

Padroes de Projeto Estruturais

Adaptador

Proposito: Adequa as operacoes da classe adaptada para a classeadaptadora

Figura: Adaptador

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 6 / 42

Page 11: Padroes de desenho

Padroes de Projeto Estruturais

Adaptador

// Exemplo de Usop u b l i c c l a s s SistemaX{

p u b l i c v o i d EnviarSMS ( s t r i n g mensagem ){

AdaptadorEnvioSMS envioSMS = new AdaptadorEnvioSMS ( ) ;envioSMS . E n v i a r ( ”9999−9999” , mensagem ) ;

}}

// Exemplo de Adaptadoru s i n g M i c r o s o f t . WindowsMobile . PocketOut look ;p u b l i c c l a s s AdaptadorEnvioSMS{

p u b l i c v o i d E n v i a r ( s t r i n g numero , s t r i n g mensagem ){

SmsMessage sms = new SmsMessage ( ) ;sms . From = new R e c i p i e n t ( t h i s . NumeroOrigem ) ;sms . Body = mensagem ;sms . To . Add ( numero ) ;sms . Send ( ) ;

}}

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 7 / 42

Page 12: Padroes de desenho

Padroes de Projeto Comportamentais

1 Conteudo

2 Apresentacao

3 Padroes de Projeto Estruturais

4 Padroes de Projeto Comportamentais

5 Padroes de Projeto Criacionais

6 Padroes de Projeto de Sistemas Empresariais

7 Referencias

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 8 / 42

Page 13: Padroes de desenho

Padroes de Projeto Comportamentais

Estrategia

Proposito: O objetivo e encapsular um conjunto de algoritmos queresolvem o mesmo problema em classes separadas permitindo que umalgoritmo especıfico possa ser selecionado facilmente atraves de umaclasse contexto. O padrao estrategia permite que os algoritmospossam variar independentemente dos sistemas que os utilizam.

Figura: EstrategiaHumberto C Marchezi () Padroes de Projeto 22 de junho de 2012 9 / 42

Page 14: Padroes de desenho

Padroes de Projeto Comportamentais

Estrategia

// O a l g o r i t m o de c r i p t o g r a f i a v a r i a com o c o n t e x t oC o n t e x t o E s t r a t e g i a C r i p t o g r a f i a c o n t e x t o E s t r a t e g i a C r i p t o g r a f i a F r a c a =

new C o n t e x t o E s t r a t e g i a C r i p t o g r a f i a ( new HMACSHA1EstrategiaCriptograf ia ( ) ) ;C o n t e x t o E s t r a t e g i a C r i p t o g r a f i a c o n t e x t o E s t r a t e g i a C r i p t o g r a f i a F o r t e =

new C o n t e x t o E s t r a t e g i a C r i p t o g r a f i a ( new M D 5 E s t r a t e g i a C r i p t o g r a f i a ( ) ) ;. . .b y t e [ ] senhaEmBytes = C o n v e r t e P a r a B y t e s ( t h i s . t x t S e n h a . Text ) ;E s t r a t e g i a C r i p t o g r a d i a c r i p t o g r a f i a 1 = c o n t e x t o E s t r a t e g i a C r i p t o g r a f i a F o r t e . O b t e r E s t r a t e g i a ( ) ;b y t e [ ] s e n h a C r i p t o g r a d a 1 = c r i p t o g r a f i a 1 . C r i p t o g r a f a r ( senhaEmBytes ) ;. . .E s t r a t e g i a C r i p t o g r a f i a c r i p t o g r a f i a 2 = c o n t e x t o E s t r a t e g i a C r i p t o g r a f i a F r a c a . O b t e r E s t r a t e g i a ( ) ;b y t e [ ] s e n h a C r i p t o g r a d a 2 = c r i p t o g r a f i a 2 . C r i p t o g r a f a r ( senhaEmBytes ) ;. . .

p u b l i c c l a s s C o n t e x t o E s t r a t e g i a C r i p t o g r a f i a{

p r i v a t e E s t r a t e g i a C r i p t o g r a f i a e s t r a t e g i a ;p u b l i c C o n t e x t o E s t r a t e g i a C r i p t o g r a f i a ( E s t r a t e g i a C r i p t o g r a f i a e s t r a t e g i a ){

t h i s . e s t r a t e g i a = e s t r a t e g i a ;}p u b l i c E s t r a t e g i a C r i p t o g r a f i a O b t e r E s t r a t e g i a ( ){

r e t u r n e s t r a t e g i a ;}

}

p u b l i c i n t e r f a c e E s t r a t e g i a C r i p t o g r a f i a{

b y t e [ ] C r i p t o g r a f a r ( b y t e [ ] dados ) ;}

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 10 / 42

Page 15: Padroes de desenho

Padroes de Projeto Comportamentais

Estrategia

p u b l i c c l a s s HMACSHA1EstrategiaCriptograf ia : E s t r a t e g i a C r i p t o g r a f i a{

p u b l i c b y t e [ ] C r i p t o g r a f a r ( b y t e [ ] dados ){

// Implementa c ao e s p e c ı f i c a para HMCA}

}

p u b l i c c l a s s M D 5 E s t r a t e g i a C r i p t o g r a f i a : E s t r a t e g i a C r i p t o g r a f i a{

p u b l i c b y t e [ ] C r i p t o g r a f a r ( b y t e [ ] dados ){

// Implementa c ao e s p e c ı f i c a para MD5}

}

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 11 / 42

Page 16: Padroes de desenho

Padroes de Projeto Criacionais

1 Conteudo

2 Apresentacao

3 Padroes de Projeto Estruturais

4 Padroes de Projeto Comportamentais

5 Padroes de Projeto Criacionais

6 Padroes de Projeto de Sistemas Empresariais

7 Referencias

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 12 / 42

Page 17: Padroes de desenho

Padroes de Projeto Criacionais

Singleton

Proposito: Uma classe que segue esse padrao, so consegue instanciarum objeto para toda a classe e tambem disponibiliza um acesso globalpara esse unico objeto atraves de um metodo ou propriedade.

Figura: Singleton

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 13 / 42

Page 18: Padroes de desenho

Padroes de Projeto Criacionais

Singleton

p u b l i c SistemaX{

p u b l i c v o i d ChecarVersaoDoSistema ( ){

S i n g l e t o n S i s t e m a s i s t e m a = S i n g l e t o n S i s t e m a . I n s t a n c i a ;t h i s . t x t V e r s a o . Text = s i s t e m a . Versao ;

}}

p u b l i c c l a s s S i n g l e t o n S i s t e m a{

// ///// Metodos S i n g l e t o n ////////////////////////// P r o p r i e d a d e que guarda a i n s t a n c i a de S i s temap r i v a t e s t a t i c Sistema i n s t a n c i a ;p u b l i c s t a t i c Sistema I n s t a n c i a{

g e t{

i f ( i n s t a n c i a == n u l l ) { i n s t a n c i a = new Sistema ( ) ; }r e t u r n i n s t a n c i a ;

}}// P r e v i n e que o c o n s t r u t o r s e j a chamado d i r e t a m e n t ep r i v a t e S i n g l e t o n S i s t e m a ( ) { }// ////////////////////////////////////////////////p u b l i c s t r i n g D e s c r i c a o {g e t ;}p u b l i c s t r i n g Versao {g e t ;}. . .

}

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 14 / 42

Page 19: Padroes de desenho

Padroes de Projeto Criacionais

Metodo de Fabrica

Proposito: Controlar a criacao de objetos de varias subclasses

Figura: Metodo de Fabrica

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 15 / 42

Page 20: Padroes de desenho

Padroes de Projeto Criacionais

Metodo de Fabrica

ConexaoBancoFactory conexaoBancoFactory = new ConexaoBancoFactory ( ) ;. . .IDbConnection conexao = n u l l ;conexao = conexaoBancoFactory . C r i a r ( TipoBanco . SQLServer ) ;ExecutarProcessamentoDeDados ( conexao ) ;conexao = conexaoBancoFactory . C r i a r ( TipoBanco . O r a c l e ) ;ExecutarProcessamentoDeDados ( conexao ) ;. . .

p u b l i c c l a s s ConexaoBancoFactory{

p u b l i c IDbConnection C r i a r ( TipoBanco t ipoBanco ){

s w i t c h ( t ipoBanco ){

c a s e SQLServer :r e t u r n new SqlConnect ion ( ) ;

c a s e O r a c l e :r e t u r n new OdbcConnection ( . . . . . ) ;

c a s e SQLServerCE :r e t u r n new SqlCeConnect ion ( ) ;

c a s e A cc e ss :r e t u r n OleConnect ion ( . . . . ) ;

d e f a u l t :throw new SystemExcept ion ( . . . ) ;

}}

}

p u b l i c enum TipoBanco{

SQLServer ,Orac le ,SQLServerCE ,A cc es s

}

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 16 / 42

Page 21: Padroes de desenho

Padroes de Projeto Criacionais

Fabrica Abstrata

Proposito: Controlar a criacao de objetos de uma famılia de classes

Figura: Fabrica Abstrata

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 17 / 42

Page 22: Padroes de desenho

Padroes de Projeto Criacionais

Fabrica Abstrata - Exemplo de Uso

// No i n i c i o da execucao da a p l i c a c a oGerenciadorMapa . MapaFactory = new Esr iMapaFactory ( . . . ) ;

// Resto da a p l i c a c a o apenas r e f e r e n c i a as i n t e r f a c e s e por i s s o ,// nao conhece a t e c n o l o g i a e s p e c ı f i c ap u b l i c v o i d JanCadastroQualquerCoisa : . . . // ( Webform ou Winform ){

p r i v a t e IMapaLote mapaLote ;p u b l i c JanCadastroQualquerCoisa ( ) // J a n C a d a s t r o Q u a l q u e r C o i s a L o a d{

IMapaLote mapaLote = GerenciadorMapa . MapaFactory . Cr iarMapaLote ( ) ;S e r v i c o C a d a s t r o Q u a l q u e r C o i s a s e r v i c o = new S e r v i c o C a d a s t r o Q u a l q u e r C o i s a ( ) ;. . . // L o g i c a da a p l i c a c a o

}p u b l i c v o i d b t A l g u m a C o i s a C l i c k ( . . . ){

l o n g i d L o t e = t h i s . i d L o t e S e l e c i o n a d o ;mapaLote . S e l e c i o n a r L o t e ( i d L o t e ) ;

t h i s . s e r v i c o . S e l e c i o n a r L o t e ( t h i s . i d L o t e S e l e c i o n a d o , t h i s . mapaLote ) ;}

}

// A l o g i c a do s e r v i c o pode s e r t e s t a d a sem u s a r o mapa r e a lp u b l i c c l a s s S e r v i c o C a d a s t r o Q u a l q u e r C o i s a{

p u b l i c S e l e c i o n a r L o t e ( l o n g i d L o t e , IMapaLote mapa ){

. . . // L o g i c a da a p l i c a c a omapa . S e l e c i o n a r L o t e ( i d L o t e ) ;

}}

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 18 / 42

Page 23: Padroes de desenho

Padroes de Projeto Criacionais

p u b l i c c l a s s GerenciadorMapa{

p r i v a t e IMapaFactory mapaFactory ;p u b l i c s t a t i c MapaFactory O b t e r F a c t o r y ( ){

r e t u r n mapaFactory ;}

}

p u b l i c i n t e r f a c e IMapaFactory{

Cr iarMapaLote ( ) : IMapaLote ;Cr iarMapaQuadra ( ) : IMapaQuadra ;C r i a r M a p a C o n s u l t a ( ) : IMapaConsulta ;

}

p u b l i c i n t e r f a c e IMapaLote{

v o i d S e l e c i o n a r L o t e ( l o n g i d L o t e ) ;L o t e E v e n t H a n d l e r e v e n t L o t e S e l e c i o n a d o

}

p u b l i c i n t e r f a c e IMapaQuadra{

v o i d S e l e c i o n a r Q u a d r a ( l o n g idQuadra ) ;e v e n t QuadraEventHandler Q u a d r a S e l e c i o n a d a ;

}

p u b l i c i n t e r f a c e IMapaConsulta{

v o i d S e l e c i o n a r L o t e ( l o n g i d L o t e ) ;e v e n t L o t e E v e n t H a n d l e r L o t e S e l e c i o n a d o ;

}

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 19 / 42

Page 24: Padroes de desenho

Padroes de Projeto Criacionais

p u b l i c c l a s s Esr iMapaFactory : IMapaFactory{

p u b l i c IMapaLote Cr iarMapaLote ( ){

r e t u r n new MapaLoteEsri ( ) ;}p u b l i c IMapaQuadra CriarMapaQuadra ( ){

r e t u r n new MapaQuadraEsri ( ) ;}p u b l i c IMapaConsulta C r i a r M a p a C o n s u l t a ( ){

r e t u r n new MapaConsultaEsr i ( ) ;}

}

p u b l i c c l a s s MapaLoteEsri : UserContro l , IMapaLote{

. . . // Implementa c ao e s p e c ı f i c a do E s r ip u b l i c v o i d S e l e c i o n a r L o t e ( l o n g i d L o t e ){

. . . // Implementa c ao e s p e c ı f i c a do E s r i}p u b l i c v o i d L o t e S e l e c i o n a d o ( ){

. . . // Implementa c ao e s p e c ı f i c a do E s r i}. . . // Implementa c ao e s p e c ı f i c a do E s r i

}

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 20 / 42

Page 25: Padroes de desenho

Padroes de Projeto Criacionais

p u b l i c c l a s s MapaQuadraEsri : UserContro l , IMapaQuadra{

. . . // Implementa c ao e s p e c ı f i c a do E s r ip u b l i c v o i d S e l e c i o n a r Q u a d r a ( l o n g idQuadra ){

. . . // Implementa c ao e s p e c ı f i c a do E s r i}p u b l i c v o i d Q u a d r a S e l e c i o n a d a ( ){

. . . // Implementa c ao e s p e c ı f i c a do E s r i}. . . // Implementa c ao e s p e c ı f i c a do E s r i

}

p u b l i c c l a s s MapaConsultaEsr i : UserContro l , IMapaConsulta{

. . . // Implementa c ao e s p e c ı f i c a do E s r ip u b l i c v o i d S e l e c i o n a r L o t e ( l o n g i d L o t e ){

. . . // Implementa c ao e s p e c ı f i c a do E s r i}p u b l i c v o i d L o t e S e l e c i o n a d o ( ){

. . . // Implementa c ao e s p e c ı f i c a do E s r i}. . . // Implementa c ao e s p e c ı f i c a do E s r i

}

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 21 / 42

Page 26: Padroes de desenho

Padroes de Projeto de Sistemas Empresariais

1 Conteudo

2 Apresentacao

3 Padroes de Projeto Estruturais

4 Padroes de Projeto Comportamentais

5 Padroes de Projeto Criacionais

6 Padroes de Projeto de Sistemas Empresariais

7 Referencias

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 22 / 42

Page 27: Padroes de desenho

Padroes de Projeto de Sistemas Empresariais

Camada de Servico

Proposito: Define um limite de aplicacao com uma camada deservicos que estabelece um conjunto de operacoes e coordena aresposta da aplicacao em cada operacao.

Figura: Camada de ServicoHumberto C Marchezi () Padroes de Projeto 22 de junho de 2012 23 / 42

Page 28: Padroes de desenho

Padroes de Projeto de Sistemas Empresariais

Camada de Servico

Caracterısticas de um Servico:

Nao contem (nao deveria) regras de negocio

Coordena as tarefas pela colaboracao dos objetos do domınio e apersistencia

Nao mantem o estado da aplicacao (nao contem campos)

Pode mostrar o progresso da realizacao da tarefa

Figura: Exemplo de Implementacao Camada de Servico

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 24 / 42

Page 29: Padroes de desenho

Padroes de Projeto de Sistemas Empresariais

Camada de Servico

p u b l i c c l a s s S e r v i c o C a d a s t r o C l i e n t e{

p u b l i c v o i d R e g i s t r a r V e n d a P r o d u t o ( s t r i n g c p f C l i e n t e , l o n g idProduto , l o n g idEmpresa ){

C l i e n t e c l i e n t e = R e c u p e r a r C l i e n t e P e l o C P F ( c p f C l i e n t e ) ;Produto produto = R e c u p e r a r P r o d u t o P e l o I d ( i d P r o d u t o ) ;Empresa empresa = R e c u p e r a r E m p r e s a P e l o I d ( idEmpresa ) ;empresa . V e r i f i c a r S e P r o d u t o E s t a D i s p o n i v e l ( p roduto ) ;empresa . VenderProduto ( produto , c l i e n t e ) ;DAO. F a c t o r y . S a l v a r ( empresa ) ;}

}

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 25 / 42

Page 30: Padroes de desenho

Padroes de Projeto de Sistemas Empresariais

Portal para Dados Tabulados (Table Data Gateway)

Proposito: Oferece uma instancia de uma classe que funciona comoum portal para acessar e modificar dados de uma tabela nobanco-de-dados.

Figura: Classes sao Portal para Acessar a Tabela

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 26 / 42

Page 31: Padroes de desenho

Padroes de Projeto de Sistemas Empresariais

Portal para Dados Tabulados (Table Data Gateway)

Vantagens:Evita que comandos SQL repetidos se espalhem pela aplicacao. (O maldo copy-paste).Isola comantos especıficos de um banco nessas classes.Permite a execucao de testes na logica da aplicacao sem ter que usaracesso ao banco-de-dados.Abordagem mais simples e de facil entendimento

Observacoes:Esse tipo de padrao e recomendado quando a camada de persistencianao puder executar um determinado acesso a dados. Ex: execucao destored procedures e SQL muito complexos e especıficos

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 27 / 42

Page 32: Padroes de desenho

Padroes de Projeto de Sistemas Empresariais

Portal para Dados Tabulados (Table Data Gateway)

p u b l i c c l a s s S e r v i c o C a d a s t r o C l i e n t e{

p u b l i c l o n g I n c l u i r C l i e n t e ( s t r i n g nome , s t r i n g cpf , s t r i n g cepEndereco , s t r i n g numeroEndereco ){

s t r i n g s q l = S t r i n g . Format ( ” i n s e r t i n t o C l i e n t e ( nome , cpf , cep , numero ) v a l u e s ( ’{0} ’ , ’{1} ’ , ’{2} ’ , ’{3} ’ ) ” ,nome , cpf , cepEndereco , numeroEndereco ) ;

IDbConnection cnx = ObterConexao ( ) ;IDbCommand cmd = cnx . CreateCommand ( ) ;cmd . ExecuteCommand ( s q l ) ;

}p u b l i c v o i d AlterarNome ( i d C l i e n t e , nome ){

. . .}p u b l i c DataTable O b t e r P e l o I d ( l o n g i d ){

s t r i n g s q l = S t r i n g . Format ( ” s e l e c t c o d C l i e n t e , nome , cpf , cep , numero where c o d C l i e n t e = {0}” , i d ) ;IDbConnection cnx = ObterConexao ( ) ;DataAdapter d a t a A d a p t e r = O b t e r D a t a Ad a p t e r P r e e n c h i d o ( s q l , cnx ) ;r e t u r n d a t a A d a p t e r . T a b l e s [ 0 ] ;

}p u b l i c DataTable ObterPeloNome ( s t r i n g nome ){

. . .}

}

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 28 / 42

Page 33: Padroes de desenho

Padroes de Projeto de Sistemas Empresariais

Modelo de Domınio (Domain Model)

Proposito: Consiste num modelo de classes que incorpora tantocomportamento (logica) quanto os dados (campos).

Figura: Um Modelo de Domınio

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 29 / 42

Page 34: Padroes de desenho

Padroes de Projeto de Sistemas Empresariais

Vantagens:Especialmente vantajoso para regras de negocio complicadas edinamicas normalmente envolvendo varios tipos de calculos, validacoese derivacoesIsola a logica de negocio das operacoes de leitura/modificacoes dedados, logo e independente de esquema de persistencia ebancos-de-dadosPermite a execucao de testes unitarios automatizados na logica denegocio contida nessas classes

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 30 / 42

Page 35: Padroes de desenho

Padroes de Projeto de Sistemas Empresariais

Objeto Valor (Value Object)

Classe Dinheirop u b l i c c l a s s D i n h e i r o{

p u b l i c D i n h e i r o (Moeda moeda , d e c i m a l v a l o r ) { Moeda = moeda ; V a l o r = v a l o r ;}p u b l i c Moeda {g e t ; s e t ;}p u b l i c V a l o r {g e t ; s e t ;}

}

Primeiro problema:Considere a situacaoD i n h e i r o p r e c o = new D i n h e i r o ( ”R” , 4 5 ) ; // 45 r e a i sproduto1 . Preco = p r e c o ; // produto1 c u s t a 45p r e c o . V a l o r = 8 0 ; // V a l o r do p r e c o e 80produto2 . Preco = p r e c o ; // produto2 c u s t a 80 e produto1 c u s t a 80 ! !

TODA instancia de uma classe no .NET e tratada como referencia eisso pode ter efetios colaterais

Segundo problema:Considere a situacaoD i n h e i r o p r e c o 1 = new D i n h e i r o ( ”R” , 8 0 ) ; // 80 r e a i sD i n h e i r o p r e c o 2 = new D i n h e i r o ( ”R” , 8 0 ) ; // 80 r e a i sb o o l e h I g u a l = ( p r e c o 1 == p r e c o 2 ) ; // FALSE : A r e f e r e n c i a em memoria e comparada

Mesmo sendo instancias distintas o resultado deveria ser TRUE

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 31 / 42

Page 36: Padroes de desenho

Padroes de Projeto de Sistemas Empresariais

Solucao: Criar classes com o padrao objeto-valorp u b l i c c l a s s D i n h e i r o{

p u b l i c D i n h e i r o (Moeda moeda , d e c i m a l v a l o r ){

Moeda = moeda ;V a l o r = v a l o r ;

}p u b l i c Moeda Moeda { g e t ; p r o t e c t e d s e t ; }p u b l i c d e c i m a l V a l o r { g e t ; p r o t e c t e d s e t ; }p u b l i c o v e r r i d e b o o l E q u a l s ( o b j e c t o b j ){

r e t u r n D i n h e i r o . E h I g u a l ( t h i s , o b j as D i n h e i r o ) ;}p u b l i c o v e r r i d e i n t GetHashCode ( ){

s t r i n g i d e n t i f i c a c a o = t h i s . Moeda . GetHashCode ( ) . T o S t r i n g ( ) + t h i s . V a l o r . T o S t r i n g ( ) ;r e t u r n i d e n t i f i c a c a o . GetHashCode ( ) ;

}p u b l i c s t a t i c b o o l o p e r a t o r ==(D i n h e i r o l h s , D i n h e i r o r h s ){

r e t u r n D i n h e i r o . E h I g u a l ( l h s , r h s ) ;}p u b l i c s t a t i c b o o l o p e r a t o r !=( D i n h e i r o l h s , D i n h e i r o r h s ){

r e t u r n ! D i n h e i r o . E h I g u a l ( l h s , r h s ) ;}p r i v a t e s t a t i c b o o l E h I g u a l ( D i n h e i r o d1 , D i n h e i r o d2 ){

r e t u r n ( ( d1 . Moeda == d2 . Moeda) && ( d1 . V a l o r == d2 . V a l o r ) ) ;}

}

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 32 / 42

Page 37: Padroes de desenho

Padroes de Projeto de Sistemas Empresariais

D i n h e i r o p r e c o 1 = new D i n h e i r o ( ”R” , 4 5 ) ; // 45 r e a i sproduto1 . Preco = p r e c o 1 ; // produto1 c u s t a 45D i n h e i r o p r e c o 2 = new D i n h e i r o ( ”R” , 8 0 ) ; // 80 r e a i sproduto2 . Preco = p r e c o 2 ; // produto2 c u s t a 80 e produto1 c u s t a 45 ! !

// ERRO: Objeto−v a l o r e i m u t a v e l , nao s e pode a l t e r a−l o apos a c r i a c a op r e c o 1 . V a l o r = 7 0 ; // ERRO: Gera exce c ao , nao s e pode a l t e r a r o v a l o rp r e c o 1 . Moeda = d o l a r ; // ERRO: Gera exce c ao , nao s e pode a l t e r a r a moeda

Proposito: Sao classes que representam valores imutaveis (naomudam) e cujo criterio de igualdade nao e baseado em umapropriedade Id. Logo, essas classes nao possuem Id.

Figura: Dinheiro e um Objeto-Valor, Moeda e uma Entidade

Vantagens:Permite simplificar conceitos mais complexosEvita que as referencias tenham que ser gerenciadas.

Observacao: Em .NET, um objeto tambem pode ser definido comoobjeto-valor se o seu tipo e um Struct

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 33 / 42

Page 38: Padroes de desenho

Padroes de Projeto de Sistemas Empresariais

Modelo Visao Controlador (Model View Controller)

Proposito: Surgiu junto com a plataforma Smalltalk e a sua ideia e aseparacao das classes de um sistema em tres papeis distintos:

Modelo: Classe nao visual com dados e comportamento. Umainformacao no sistema.Visao: Classe que representa o modelo visualmente na interface grafica.Controlador: Recebe a entrada de dados, manipula o modelo e atualizaa visao apropriadamente.

Figura: Pacotes MVC

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 34 / 42

Page 39: Padroes de desenho

Padroes de Projeto de Sistemas Empresariais

Modelo Visao Controlador (Model View Controller)

Vantagens:Guia a separacao de classes com papeis diferentesModelo pode ser representado visualmente de varias formasFacilita o teste de objetos nao visuais como o modelo

Figura: Exemplo de Implementacao MVCHumberto C Marchezi () Padroes de Projeto 22 de junho de 2012 35 / 42

Page 40: Padroes de desenho

Padroes de Projeto de Sistemas Empresariais

Modelo Visao Controlador (Model View Controller)

Modelop u b l i c c l a s s Contato{

p u b l i c Contato ( s t r i n g nome , s t r i n g e m a i l ){

Nome = nome ;Emai l = e m a i l ;

}p u b l i c l o n g I d { g e t ; p r o t e c t e d s e t ; }p u b l i c s t r i n g Nome { g e t ; s e t ; }p u b l i c s t r i n g Emai l { g e t ; s e t ; }

}

Visaop u b l i c i n t e r f a c e I C a d a s t r o C o n t a t o V i e w{

l o n g I d C o n t a t o { g e t ; s e t ; }s t r i n g NomeContato { g e t ; s e t ; }s t r i n g Emai lContato { g e t ; s e t ; }b o o l H a b i l i t a r I d C o n t a t o { s e t ; }b o o l H a b i l i t a r N o m e C o n t a t o { s e t ; }b o o l H a b i l i t a r E m a i l C o n t a t o { s e t ; }e v e n t E v e n t H a n d l e r I n s e r i r C l i e n t e ;e v e n t E v e n t H a n d l e r N o v o C l i e n t e ;

}

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 36 / 42

Page 41: Padroes de desenho

Padroes de Projeto de Sistemas Empresariais

Modelo Visao Controlador - Controlador

p u b l i c c l a s s C a d a s t r o C o n t a t o C o n t r o l a d o r{

p r i v a t e I C a d a s t r o C o n t a t o V i e w v i s a o ;p u b l i c C a d a s t r o C o n t a t o C o n t r o l a d o r ( I C a d a s t r o C o n t a t o V i e w v i s a o ){

v i s a o = v i s a o ;v i s a o . I n s e r i r C l i e n t e += new E v e n t H a n d l e r ( C l i e n t e I n s e r i d o ) ;v i s a o . N o v o C l i e n t e += new E v e n t H a n d l e r ( N o v o C l i e n t e ) ;

}

v o i d N o v o C l i e n t e ( o b j e c t se n de r , EventArgs e ){

t h i s . v i s a o . H a b i l i t a r I d C o n t a t o = t r u e ;t h i s . v i s a o . H a b i l i t a r N o m e C o n t a t o = t r u e ;t h i s . v i s a o . H a b i l i t a r E m a i l C o n t a t o = t r u e ;t h i s . v i s a o . I d C o n t a t o = 0 ;t h i s . v i s a o . NomeContato = s t r i n g . Empty ;t h i s . v i s a o . Emai lContato = s t r i n g . Empty ;

}

v o i d C l i e n t e I n s e r i d o ( o b j e c t s e nd e r , EventArgs e ){

Contato c o n t a t o = new Contato ( t h i s . v i s a o . NomeContato , t h i s . v i s a o . Emai lContato ) ;P e r s i s t e n c i a . S a l v a r ( c o n t a t o ) ;t h i s . v i s a o . H a b i l i t a r I d C o n t a t o = f a l s e ;t h i s . v i s a o . H a b i l i t a r N o m e C o n t a t o = f a l s e ;t h i s . v i s a o . H a b i l i t a r E m a i l C o n t a t o = f a l s e ;

}}

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 37 / 42

Page 42: Padroes de desenho

Padroes de Projeto de Sistemas Empresariais

Modelo Visao Controlador (Model View Controller)

p u b l i c p a r t i a l c l a s s J a n C a d a s t r o C o n t a t o : Form , I C a d a s t r o C o n t a t o V i e w{

p r i v a t e C a d a s t r o C o n t a t o C o n t r o l a d o r c o n t r o l a d o r ;p u b l i c J a n C a d a s t r oC o n t a t o ( ){

I n i t i a l i z e C o m p o n e n t ( ) ;c o n t r o l a d o r = new C a d a s t r o C o n t a t o C o n t r o l a d o r ( t h i s ) ;

}p u b l i c b o o l H a b i l i t a r N o m e C o n t a t o { s e t { t h i s . txtNome . Enabled = v a l u e ; } }p u b l i c b o o l H a b i l i t a r E m a i l C o n t a t o { s e t { t h i s . t x t C o n t a t o . Enabled = v a l u e ; } }p u b l i c b o o l H a b i l i t a r I d C o n t a t o { s e t { t h i s . numIdContato . Enabled = v a l u e ; } }p u b l i c l o n g I d C o n t a t o{

g e t { r e t u r n ( l o n g ) t h i s . numIdContato . Value ; }s e t { t h i s . numIdContato . Value = v a l u e ; }

}p u b l i c s t r i n g NomeContato{

g e t { r e t u r n t h i s . txtNome . Text ; }s e t { t h i s . txtNome . Text = v a l u e ; }

}p u b l i c s t r i n g Emai lContato{

g e t { r e t u r n t h i s . t x t C o n t a t o . Text ; }s e t { t h i s . t x t C o n t a t o . Text = v a l u e ; }

}p u b l i c e v e n t E v e n t H a n d l e r I n s e r i r C l i e n t e ;p r i v a t e v o i d b t I n c l u i r C l i c k ( o b j e c t s en d e r , EventArgs e ) { t h i s . I n s e r i r C l i e n t e ( s en d er , e ) ; }p u b l i c e v e n t E v e n t H a n d l e r N o v o C l i e n t e ;p r i v a t e v o i d b t N o v o C l i c k ( o b j e c t se n de r , EventArgs e ) { t h i s . N o v o C l i e n t e ( se n de r , e ) ; }

}Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 38 / 42

Page 43: Padroes de desenho

Padroes de Projeto de Sistemas Empresariais

Modelo Visao Controlador (Model View Controller)

p u b l i c p a r t i a l c l a s s WebCadastroContato : System . Web . UI . Page , I C a d a s t r o C o n t a t o V i e w{

p r i v a t e C a d a s t r o C o n t a t o C o n t r o l a d o r c o n t r o l a d o r ;p r o t e c t e d v o i d Page Load ( o b j e c t s e nd e r , EventArgs e ){

c o n t r o l a d o r = new C a d a s t r o C o n t a t o C o n t r o l a d o r ( t h i s ) ;}p u b l i c b o o l H a b i l i t a r I d C o n t a t o { s e t { t h i s . t x t I d C o n t a t o . Enabled = v a l u e ; } }p u b l i c b o o l H a b i l i t a r N o m e C o n t a t o { s e t { t h i s . txtNomeContato . Enabled = v a l u e ; } }p u b l i c b o o l H a b i l i t a r E m a i l C o n t a t o { s e t { t h i s . t x t E m a i l C o n t a t o . Enabled = v a l u e ; } }p u b l i c l o n g I d C o n t a t o{

g e t { r e t u r n I n t 6 4 . Parse ( t h i s . t x t I d C o n t a t o . Text ) ; }s e t { t h i s . t x t I d C o n t a t o . Text = v a l u e . T o S t r i n g ( ) ; }

}p u b l i c s t r i n g NomeContato{

g e t { r e t u r n t h i s . txtNomeContato . Text ; }s e t { t h i s . txtNomeContato . Text = v a l u e ; }

}p u b l i c s t r i n g Emai lContato{

g e t { r e t u r n t h i s . t x t E m a i l C o n t a t o . Text ; }s e t { t h i s . t x t E m a i l C o n t a t o . Text = v a l u e ; }

}p u b l i c e v e n t E v e n t H a n d l e r N o v o C l i e n t e ;p r o t e c t e d v o i d b t N o v o C o n t a t o C l i c k ( o b j e c t s e nd e r , EventArgs e ) { t h i s . N o v o C l i e n t e ( se n d er , e ) ; }p u b l i c e v e n t E v e n t H a n d l e r I n s e r i r C l i e n t e ;p r o t e c t e d v o i d b t I n c l u i r C o n t a t o C l i c k ( o b j e c t s e nd e r , EventArgs e ) { t h i s . I n s e r i r C l i e n t e ( s en d er , e ) ; }

}

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 39 / 42

Page 44: Padroes de desenho

Padroes de Projeto de Sistemas Empresariais

Exercıcio Data Table Gateway

Criar um Data Table Gateway para o sistema do exercıcio anterior

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 40 / 42

Page 45: Padroes de desenho

Padroes de Projeto de Sistemas Empresariais

Exercıcio MVC

Aplicacao Winforms e Webforms

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 41 / 42

Page 46: Padroes de desenho

Referencias

Referencias

data & object factory:http://www.dofactory.com/Patterns/Patterns.aspx

Patterns of Enterprise Application Architecture - Martin Fowler:http://martinfowler.com/eaaCatalog/

Humberto C Marchezi () Padroes de Projeto 22 de junho de 2012 42 / 42