SlideShare ist ein Scribd-Unternehmen logo
1 von 18
Downloaden Sie, um offline zu lesen
DDaattaabbaassee RReeffaaccttoorriinngg 
@fabriziomello @guilhermeslac
QQuueemm ssoommooss?? 
Fabrízio Mello 
● Desenvolvedor PostgreSQL 
● Líder PostgreSQL Brasil 
● Pós-Graduando UniiRitter (Agile) 
● @fabriziomello 
● http://fabriziomello.github.io 
Guilherme Lacerda 
● Consultor e Professor Universitário (UniRitter, Unisinos e UFRGS) 
● Doutorando em Ciência da Computação (UFRGS) 
● @guilhermeslac 
● http://www.guilhermelacerda.net
AAggeennddaa 
●Database Refactoring 
●Problema 
●Considerações Finais
RReeffaaccttoorriinngg 
”Processo de alteração de um sistema de software de 
modo que o comportamento externo do código não 
mude, mas que sua estrutura interna seja melhorada.” 
”É uma forma disciplinada de aperfeiçoar código que 
minimiza a introdução de falhas.” 
(Martin Fowler 2004)
DDaattaabbaassee RReeffaaccttoorriinngg 
“É quando uma simples mudança no 
esquema de uma base de dados melhora a 
sua concepção (projeto), embora mantendo 
simultaneamente a sua semâtica". 
(Scott W. Ambler 2006)
DDaattaabbaassee RReeffaaccttoorriinngg 
“Mudança disciplinada na estrutura de uma 
base de dados que não altera sua 
semântica, porém melhora seu projeto e 
minimiza a introdução de dados 
inconsistentes". 
(Fabrízio de Royes Mello 2009)
Refatoração ddee BBaannccoo ddee 
DDaaddooss 
Deterioração + Mudanças em Requisitos = 
Necessidade de Refatoração 
Mas não é tão simples como parece: 
● além de manter comportamento também é preciso 
manter informação (dados) 
● acoplamento com diversas origens (apps, bds, 
integrações, 3rd, ...)
Single-DDaattaabbaassee AApppplliiccaattiioonn 
Sua 
Aplicação 
Seu 
Banco de Dados
Multi-AApppplliiccaattiioonn DDaattaabbaassee 
Sua 
Aplicação 
Seu 
Banco de 
Dados 
Outras Aplicações 
que Você NÃO 
Conhece 
Outros 
Banco de 
Dados 
Outras Aplicações 
que Você Conhece 
Outras Aplicações 
que Você Conhece 
Frameworks 
de 
Persistência 
Outras Aplicações 
que Você NÃO 
Conhece 
Arquivos 
de Dados 
Códigos 
de Testes
CCiicclloo ddee vviiddaa
MMooddeelloo IInniicciiaall
MMooddeelloo RReessuullttaannttee
RReeffaattoorraaççõõeess 
● Adicionar restrição de integridade na tabela 
SALES 
● Na tabela “Customer” existe um campo “City” que 
é um VARCHAR, então precisamos separar em 
outra tabela, criando um período de transição 
● Encerrar período de transição
MMããoo--nnaa--mmaassssaa
CCoonnssiiddeerraaççõõeess ffiinnaaiiss 
● Melhoria continua 
● Aumentar simplicidade para facilitar entendimento 
● Tornar modelos mais próximos do mundo real 
● Criar modelos mais simples para facilitar: 
● Manutenção e 
● Evolução da aplicação
RReeffeerrêênncciiaass 
●Refactoring Improving the Desing of Existing Code (Martin Fowler) 
●Refactoring Databases: Evolutionary Database Design (Scott 
Ambler e Pramod Sadalage) 
●http://martinfowler.com/books/refactoring.html 
●http://agiledata.org/essays/databaseRefactoring.html 
●http://www.agiledata.org/essays/databaseRefactoringSmells.html 
●http://fabriziomello.github.io/blog/2013/06/10/database-refactoring/
MMuuiittoo Obbrriiggaaddoo!! 
g u i l h e r me s l a c e rd a@g m a i l . c o m 
@g u i l h e r me s l a c 
f a b r i z i o me l l o@g m a i l . c o m 
@f a b r i z i o me l l o 
w w w . c o d i n g b y e x a m p l e . o rg 
w w w . o rg a n i z a c a o v i s u a l . n e t

Weitere ähnliche Inhalte

Andere mochten auch

Sharing Code and Experiences
Sharing Code and ExperiencesSharing Code and Experiences
Sharing Code and ExperiencesFabrízio Mello
 
GSoC2014 - PGCon2015 Presentation June, 2015
GSoC2014 - PGCon2015 Presentation June, 2015GSoC2014 - PGCon2015 Presentation June, 2015
GSoC2014 - PGCon2015 Presentation June, 2015Fabrízio Mello
 
GSoC2014 - Uniritter Presentation May, 2015
GSoC2014 - Uniritter Presentation May, 2015GSoC2014 - Uniritter Presentation May, 2015
GSoC2014 - Uniritter Presentation May, 2015Fabrízio Mello
 
Postgres Wonderland - PGDay Cascavél 2013
Postgres Wonderland - PGDay Cascavél 2013Postgres Wonderland - PGDay Cascavél 2013
Postgres Wonderland - PGDay Cascavél 2013Fabio Telles Rodriguez
 
GSoC2014 - PGDay Ijui/RS Presentation October, 2016
GSoC2014 - PGDay Ijui/RS Presentation October, 2016 GSoC2014 - PGDay Ijui/RS Presentation October, 2016
GSoC2014 - PGDay Ijui/RS Presentation October, 2016 Fabrízio Mello
 
Bad Smells (mal cheiros) em Bancos de Dados
Bad Smells (mal cheiros) em Bancos de DadosBad Smells (mal cheiros) em Bancos de Dados
Bad Smells (mal cheiros) em Bancos de DadosFabrízio Mello
 
Planejador de Consultas do PostgreSQL
Planejador de Consultas do PostgreSQLPlanejador de Consultas do PostgreSQL
Planejador de Consultas do PostgreSQLFabrízio Mello
 
EXPLicando o Explain no PostgreSQL
EXPLicando o Explain no PostgreSQLEXPLicando o Explain no PostgreSQL
EXPLicando o Explain no PostgreSQLFabrízio Mello
 

Andere mochten auch (9)

Sharing Code and Experiences
Sharing Code and ExperiencesSharing Code and Experiences
Sharing Code and Experiences
 
GSoC2014 - PGCon2015 Presentation June, 2015
GSoC2014 - PGCon2015 Presentation June, 2015GSoC2014 - PGCon2015 Presentation June, 2015
GSoC2014 - PGCon2015 Presentation June, 2015
 
Dojo plpgsql
Dojo plpgsqlDojo plpgsql
Dojo plpgsql
 
GSoC2014 - Uniritter Presentation May, 2015
GSoC2014 - Uniritter Presentation May, 2015GSoC2014 - Uniritter Presentation May, 2015
GSoC2014 - Uniritter Presentation May, 2015
 
Postgres Wonderland - PGDay Cascavél 2013
Postgres Wonderland - PGDay Cascavél 2013Postgres Wonderland - PGDay Cascavél 2013
Postgres Wonderland - PGDay Cascavél 2013
 
GSoC2014 - PGDay Ijui/RS Presentation October, 2016
GSoC2014 - PGDay Ijui/RS Presentation October, 2016 GSoC2014 - PGDay Ijui/RS Presentation October, 2016
GSoC2014 - PGDay Ijui/RS Presentation October, 2016
 
Bad Smells (mal cheiros) em Bancos de Dados
Bad Smells (mal cheiros) em Bancos de DadosBad Smells (mal cheiros) em Bancos de Dados
Bad Smells (mal cheiros) em Bancos de Dados
 
Planejador de Consultas do PostgreSQL
Planejador de Consultas do PostgreSQLPlanejador de Consultas do PostgreSQL
Planejador de Consultas do PostgreSQL
 
EXPLicando o Explain no PostgreSQL
EXPLicando o Explain no PostgreSQLEXPLicando o Explain no PostgreSQL
EXPLicando o Explain no PostgreSQL
 

Ähnlich wie Database Refactoring: Evolução e Manutenção de Bancos de Dados

Refactoring Databases
Refactoring DatabasesRefactoring Databases
Refactoring DatabasesIsmael
 
Mudando a Cultura de uma Organização para o Pensamento Ágil
Mudando a Cultura de umaOrganização para o Pensamento ÁgilMudando a Cultura de umaOrganização para o Pensamento Ágil
Mudando a Cultura de uma Organização para o Pensamento ÁgilLuiz C. Parzianello
 
Banco de Dados Ágeis e Refatoração
Banco de Dados Ágeis e RefatoraçãoBanco de Dados Ágeis e Refatoração
Banco de Dados Ágeis e Refatoraçãoelliando dias
 
Ágil e Arquitetura-Os Opostos se Atraem
Ágil e Arquitetura-Os Opostos se AtraemÁgil e Arquitetura-Os Opostos se Atraem
Ágil e Arquitetura-Os Opostos se AtraemCentus Consultoria
 
Sistema Integrado de Gestão Empresarial - ERP
Sistema Integrado de Gestão Empresarial - ERPSistema Integrado de Gestão Empresarial - ERP
Sistema Integrado de Gestão Empresarial - ERPmlima72
 
O fator manutenção no ciclo de vida de data warehouse
O fator manutenção no ciclo de vida de data warehouseO fator manutenção no ciclo de vida de data warehouse
O fator manutenção no ciclo de vida de data warehouseEderson Schwaickardt
 
Padrão de estrangulamento na prática – A jornada de modernização de um legado...
Padrão de estrangulamento na prática – A jornada de modernização de um legado...Padrão de estrangulamento na prática – A jornada de modernização de um legado...
Padrão de estrangulamento na prática – A jornada de modernização de um legado...ThoughtWorks Brasil
 
Estado arte i3geo_marco_2014
Estado arte i3geo_marco_2014Estado arte i3geo_marco_2014
Estado arte i3geo_marco_2014Edmar Moretti
 
PGAnalytics - Facilitando sua vida do DBA
PGAnalytics - Facilitando sua vida do DBAPGAnalytics - Facilitando sua vida do DBA
PGAnalytics - Facilitando sua vida do DBADextra
 
SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning)
SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning)SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning)
SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning)Dirceu Resende
 
Conceitos de ERP -- Da introdução até a implementação
Conceitos de ERP -- Da introdução até a implementaçãoConceitos de ERP -- Da introdução até a implementação
Conceitos de ERP -- Da introdução até a implementaçãoLuisRoberto96
 
Operações - Base de Conhecimento - Parte 01
Operações - Base de Conhecimento - Parte 01Operações - Base de Conhecimento - Parte 01
Operações - Base de Conhecimento - Parte 01Alan Carlos
 
DBA Brasil 2.0: Como o papel e atividades de DBA ficam no contexto da cultura...
DBA Brasil 2.0: Como o papel e atividades de DBA ficam no contexto da cultura...DBA Brasil 2.0: Como o papel e atividades de DBA ficam no contexto da cultura...
DBA Brasil 2.0: Como o papel e atividades de DBA ficam no contexto da cultura...Fabrízio Mello
 

Ähnlich wie Database Refactoring: Evolução e Manutenção de Bancos de Dados (20)

Refactoring Databases
Refactoring DatabasesRefactoring Databases
Refactoring Databases
 
Sql Server
Sql ServerSql Server
Sql Server
 
Aula2
Aula2Aula2
Aula2
 
Mudando a Cultura de uma Organização para o Pensamento Ágil
Mudando a Cultura de umaOrganização para o Pensamento ÁgilMudando a Cultura de umaOrganização para o Pensamento Ágil
Mudando a Cultura de uma Organização para o Pensamento Ágil
 
Protheus V12
Protheus V12Protheus V12
Protheus V12
 
Banco de Dados Ágeis e Refatoração
Banco de Dados Ágeis e RefatoraçãoBanco de Dados Ágeis e Refatoração
Banco de Dados Ágeis e Refatoração
 
Ágil e Arquitetura-Os Opostos se Atraem
Ágil e Arquitetura-Os Opostos se AtraemÁgil e Arquitetura-Os Opostos se Atraem
Ágil e Arquitetura-Os Opostos se Atraem
 
Projetos Digitais v.1.13 from 2013
Projetos Digitais v.1.13 from 2013Projetos Digitais v.1.13 from 2013
Projetos Digitais v.1.13 from 2013
 
Projetos Digitais v.1.8 from 2010
Projetos Digitais v.1.8 from 2010Projetos Digitais v.1.8 from 2010
Projetos Digitais v.1.8 from 2010
 
Sistema Integrado de Gestão Empresarial - ERP
Sistema Integrado de Gestão Empresarial - ERPSistema Integrado de Gestão Empresarial - ERP
Sistema Integrado de Gestão Empresarial - ERP
 
O fator manutenção no ciclo de vida de data warehouse
O fator manutenção no ciclo de vida de data warehouseO fator manutenção no ciclo de vida de data warehouse
O fator manutenção no ciclo de vida de data warehouse
 
2ºAgileTalk - Criação de uma metodologia baseada em Scrum para escritórios de...
2ºAgileTalk - Criação de uma metodologia baseada em Scrum para escritórios de...2ºAgileTalk - Criação de uma metodologia baseada em Scrum para escritórios de...
2ºAgileTalk - Criação de uma metodologia baseada em Scrum para escritórios de...
 
Padrão de estrangulamento na prática – A jornada de modernização de um legado...
Padrão de estrangulamento na prática – A jornada de modernização de um legado...Padrão de estrangulamento na prática – A jornada de modernização de um legado...
Padrão de estrangulamento na prática – A jornada de modernização de um legado...
 
Estado arte i3geo_marco_2014
Estado arte i3geo_marco_2014Estado arte i3geo_marco_2014
Estado arte i3geo_marco_2014
 
PGAnalytics - Facilitando sua vida do DBA
PGAnalytics - Facilitando sua vida do DBAPGAnalytics - Facilitando sua vida do DBA
PGAnalytics - Facilitando sua vida do DBA
 
SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning)
SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning)SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning)
SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning)
 
Conceitos de ERP -- Da introdução até a implementação
Conceitos de ERP -- Da introdução até a implementaçãoConceitos de ERP -- Da introdução até a implementação
Conceitos de ERP -- Da introdução até a implementação
 
Operações - Base de Conhecimento - Parte 01
Operações - Base de Conhecimento - Parte 01Operações - Base de Conhecimento - Parte 01
Operações - Base de Conhecimento - Parte 01
 
MS Datazen.v.0.0.1 from 2015
MS Datazen.v.0.0.1 from 2015MS Datazen.v.0.0.1 from 2015
MS Datazen.v.0.0.1 from 2015
 
DBA Brasil 2.0: Como o papel e atividades de DBA ficam no contexto da cultura...
DBA Brasil 2.0: Como o papel e atividades de DBA ficam no contexto da cultura...DBA Brasil 2.0: Como o papel e atividades de DBA ficam no contexto da cultura...
DBA Brasil 2.0: Como o papel e atividades de DBA ficam no contexto da cultura...
 

Mehr von Fabrízio Mello

PHP e PostgreSQL: Um é pouco, dois é bom, três é demais
PHP e PostgreSQL: Um é pouco, dois é bom, três é demaisPHP e PostgreSQL: Um é pouco, dois é bom, três é demais
PHP e PostgreSQL: Um é pouco, dois é bom, três é demaisFabrízio Mello
 
Bad Smells (mal cheiros) em Bancos de Dados
Bad Smells (mal cheiros) em Bancos de DadosBad Smells (mal cheiros) em Bancos de Dados
Bad Smells (mal cheiros) em Bancos de DadosFabrízio Mello
 
URCAMP (Jun2017) - Como o papel e atividades de DBA ficam no contexto da cult...
URCAMP (Jun2017) - Como o papel e atividades de DBA ficam no contexto da cult...URCAMP (Jun2017) - Como o papel e atividades de DBA ficam no contexto da cult...
URCAMP (Jun2017) - Como o papel e atividades de DBA ficam no contexto da cult...Fabrízio Mello
 
Software Delivery Like a Boss
Software Delivery Like a BossSoftware Delivery Like a Boss
Software Delivery Like a BossFabrízio Mello
 
NoSQL + SQL = PostgreSQL (PGDay Campinas 2014)
NoSQL + SQL = PostgreSQL (PGDay Campinas 2014)NoSQL + SQL = PostgreSQL (PGDay Campinas 2014)
NoSQL + SQL = PostgreSQL (PGDay Campinas 2014)Fabrízio Mello
 
Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Fabrízio Mello
 
Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010Fabrízio Mello
 
Oficina postgresql basico_consegi2010
Oficina postgresql basico_consegi2010Oficina postgresql basico_consegi2010
Oficina postgresql basico_consegi2010Fabrízio Mello
 
Database refactoring postgresql_consegi2010
Database refactoring postgresql_consegi2010Database refactoring postgresql_consegi2010
Database refactoring postgresql_consegi2010Fabrízio Mello
 
Database Refactoring PostgreSQL Urcamp Alegrete 2009
Database Refactoring PostgreSQL Urcamp Alegrete 2009Database Refactoring PostgreSQL Urcamp Alegrete 2009
Database Refactoring PostgreSQL Urcamp Alegrete 2009Fabrízio Mello
 
Database Refactoring com PostgreSQL PGDay RS 2009
Database Refactoring com PostgreSQL PGDay RS 2009Database Refactoring com PostgreSQL PGDay RS 2009
Database Refactoring com PostgreSQL PGDay RS 2009Fabrízio Mello
 
Refatoração Banco de Dados (Agileweekend2009)
Refatoração Banco de Dados (Agileweekend2009)Refatoração Banco de Dados (Agileweekend2009)
Refatoração Banco de Dados (Agileweekend2009)Fabrízio Mello
 

Mehr von Fabrízio Mello (12)

PHP e PostgreSQL: Um é pouco, dois é bom, três é demais
PHP e PostgreSQL: Um é pouco, dois é bom, três é demaisPHP e PostgreSQL: Um é pouco, dois é bom, três é demais
PHP e PostgreSQL: Um é pouco, dois é bom, três é demais
 
Bad Smells (mal cheiros) em Bancos de Dados
Bad Smells (mal cheiros) em Bancos de DadosBad Smells (mal cheiros) em Bancos de Dados
Bad Smells (mal cheiros) em Bancos de Dados
 
URCAMP (Jun2017) - Como o papel e atividades de DBA ficam no contexto da cult...
URCAMP (Jun2017) - Como o papel e atividades de DBA ficam no contexto da cult...URCAMP (Jun2017) - Como o papel e atividades de DBA ficam no contexto da cult...
URCAMP (Jun2017) - Como o papel e atividades de DBA ficam no contexto da cult...
 
Software Delivery Like a Boss
Software Delivery Like a BossSoftware Delivery Like a Boss
Software Delivery Like a Boss
 
NoSQL + SQL = PostgreSQL (PGDay Campinas 2014)
NoSQL + SQL = PostgreSQL (PGDay Campinas 2014)NoSQL + SQL = PostgreSQL (PGDay Campinas 2014)
NoSQL + SQL = PostgreSQL (PGDay Campinas 2014)
 
Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012
 
Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010
 
Oficina postgresql basico_consegi2010
Oficina postgresql basico_consegi2010Oficina postgresql basico_consegi2010
Oficina postgresql basico_consegi2010
 
Database refactoring postgresql_consegi2010
Database refactoring postgresql_consegi2010Database refactoring postgresql_consegi2010
Database refactoring postgresql_consegi2010
 
Database Refactoring PostgreSQL Urcamp Alegrete 2009
Database Refactoring PostgreSQL Urcamp Alegrete 2009Database Refactoring PostgreSQL Urcamp Alegrete 2009
Database Refactoring PostgreSQL Urcamp Alegrete 2009
 
Database Refactoring com PostgreSQL PGDay RS 2009
Database Refactoring com PostgreSQL PGDay RS 2009Database Refactoring com PostgreSQL PGDay RS 2009
Database Refactoring com PostgreSQL PGDay RS 2009
 
Refatoração Banco de Dados (Agileweekend2009)
Refatoração Banco de Dados (Agileweekend2009)Refatoração Banco de Dados (Agileweekend2009)
Refatoração Banco de Dados (Agileweekend2009)
 

Database Refactoring: Evolução e Manutenção de Bancos de Dados

  • 2. QQuueemm ssoommooss?? Fabrízio Mello ● Desenvolvedor PostgreSQL ● Líder PostgreSQL Brasil ● Pós-Graduando UniiRitter (Agile) ● @fabriziomello ● http://fabriziomello.github.io Guilherme Lacerda ● Consultor e Professor Universitário (UniRitter, Unisinos e UFRGS) ● Doutorando em Ciência da Computação (UFRGS) ● @guilhermeslac ● http://www.guilhermelacerda.net
  • 3. AAggeennddaa ●Database Refactoring ●Problema ●Considerações Finais
  • 4. RReeffaaccttoorriinngg ”Processo de alteração de um sistema de software de modo que o comportamento externo do código não mude, mas que sua estrutura interna seja melhorada.” ”É uma forma disciplinada de aperfeiçoar código que minimiza a introdução de falhas.” (Martin Fowler 2004)
  • 5. DDaattaabbaassee RReeffaaccttoorriinngg “É quando uma simples mudança no esquema de uma base de dados melhora a sua concepção (projeto), embora mantendo simultaneamente a sua semâtica". (Scott W. Ambler 2006)
  • 6. DDaattaabbaassee RReeffaaccttoorriinngg “Mudança disciplinada na estrutura de uma base de dados que não altera sua semântica, porém melhora seu projeto e minimiza a introdução de dados inconsistentes". (Fabrízio de Royes Mello 2009)
  • 7. Refatoração ddee BBaannccoo ddee DDaaddooss Deterioração + Mudanças em Requisitos = Necessidade de Refatoração Mas não é tão simples como parece: ● além de manter comportamento também é preciso manter informação (dados) ● acoplamento com diversas origens (apps, bds, integrações, 3rd, ...)
  • 8. Single-DDaattaabbaassee AApppplliiccaattiioonn Sua Aplicação Seu Banco de Dados
  • 9. Multi-AApppplliiccaattiioonn DDaattaabbaassee Sua Aplicação Seu Banco de Dados Outras Aplicações que Você NÃO Conhece Outros Banco de Dados Outras Aplicações que Você Conhece Outras Aplicações que Você Conhece Frameworks de Persistência Outras Aplicações que Você NÃO Conhece Arquivos de Dados Códigos de Testes
  • 13. RReeffaattoorraaççõõeess ● Adicionar restrição de integridade na tabela SALES ● Na tabela “Customer” existe um campo “City” que é um VARCHAR, então precisamos separar em outra tabela, criando um período de transição ● Encerrar período de transição
  • 15. CCoonnssiiddeerraaççõõeess ffiinnaaiiss ● Melhoria continua ● Aumentar simplicidade para facilitar entendimento ● Tornar modelos mais próximos do mundo real ● Criar modelos mais simples para facilitar: ● Manutenção e ● Evolução da aplicação
  • 16.
  • 17. RReeffeerrêênncciiaass ●Refactoring Improving the Desing of Existing Code (Martin Fowler) ●Refactoring Databases: Evolutionary Database Design (Scott Ambler e Pramod Sadalage) ●http://martinfowler.com/books/refactoring.html ●http://agiledata.org/essays/databaseRefactoring.html ●http://www.agiledata.org/essays/databaseRefactoringSmells.html ●http://fabriziomello.github.io/blog/2013/06/10/database-refactoring/
  • 18. MMuuiittoo Obbrriiggaaddoo!! g u i l h e r me s l a c e rd a@g m a i l . c o m @g u i l h e r me s l a c f a b r i z i o me l l o@g m a i l . c o m @f a b r i z i o me l l o w w w . c o d i n g b y e x a m p l e . o rg w w w . o rg a n i z a c a o v i s u a l . n e t