SlideShare una empresa de Scribd logo
1 de 26
Descargar para leer sin conexión
Implementação, design
ou arquitetura?
Desenhar sistemas é uma tarefa difícil
E, ainda fazer com que sejam
escaláveis e performáticos,
mantendo uma alta qualidade
interna e externa, é um desafio!
“Você deve enfrentar suas batalhas
de design, sejam elas no nível
macroarquitetural ou no humilde
campo das instâncias”
Craig Larman
Qual é a diferença de design e
arquitetura de software?
design é feito em cima
do que foi decidido
pela arquitetura
por isso o que faz parte
da arquitetura é mais
difícil de mudar
“Alguns padrões podem ser chamados
arquiteturais, já que representam decisões
importantes sobre essas partes; outros são
mais sobre design e o ajudam a
implementar essa arquitetura”
Martin Fowler
“Alguns padrões podem ser chamados
arquiteturais, já que representam decisões
importantes sobre essas partes; outros são
mais sobre design e o ajudam a
implementar essa arquitetura”
Martin Fowler
“Não faço nenhuma forte
tentativa de separar esses
dois, uma vez que aquilo
que é arquitetural ou não é
subjetivo”
'
“o termo arquitetura envolve a
noção dos principais elementos do
sistema, as peças que são mais
difíceis de mudar”
Arquiteturas são as decisões
que gostaríamos de ter
tomado no começo do
projeto
Ralph Johnson (do GoF)
Implementação, design ou arquitetura?
Implementação, design ou arquitetura?
Implementação, design ou arquitetura?
Implementação, design ou arquitetura?
Uma vez que somente
implementações são concretas,
todo tipo de mudança implica em
conhecer a implementação!
Implementação, design ou arquitetura?
Implementação, design ou arquitetura?
public class Conta {
private BigDecimal saldo = BigDecimal.ZERO;
private BigDecimal limite = BigDecimal.ZERO;
private Cliente titular;
private int numero;
private Calendar dataAbertura;
public void setNumero(int numero) {
this.numero = numero;
}
public void setDataAbertura(Calendar dataAbertura) {
this.dataAbertura = dataAbertura;
}
public int getNumero() {
return numero;
}
public Calendar getDataAbertura() {
return dataAbertura;
}
…
public class Conta {
private BigDecimal saldo = BigDecimal.ZERO;
private BigDecimal limite = BigDecimal.ZERO;
private Cliente titular;
private int numero;
private Calendar dataAbertura;
public Conta(int numero, Calendar dataAbertura) {
setNumero(numero);
setDataAbertura(dataAbertura);
}
private void setNumero(int numero) {
this.numero = numero;
}
private void setDataAbertura(Calendar dataAbertura) {
this.dataAbertura = dataAbertura;
}
public int getNumero() {
return numero;
}
public class Conta {
private BigDecimal saldo = BigDecimal.ZERO;
private BigDecimal limite = BigDecimal.ZERO;
private Cliente titular;
private int numero;
private Calendar dataAbertura;
public Conta(int numero, Calendar dataAbertura, BigDecimal saldoInicial,
MaisUmMonteDeParametros... ) {
setNumero(numero);
setDataAbertura(dataAbertura);
setSaldo(saldoInicial);
…
}
private void setNumero(int numero) {
this.numero = numero;
}
private void setDataAbertura(Calendar dataAbertura) {
this.dataAbertura = dataAbertura;
}
public class TestaBuilder {
public static void main(String[] args) {
Conta conta = ContaBuilder.novaConta()
.comNumero(456)
.comDataDeAbertura(2012, 04, 20)
.eDepositoInicial("100")
.toConta();
conta.saca(new BigDecimal("50"));
System.out.println(conta.getSaldo());
}
}
Uma boa implementação,
design ou arquitetura:
É aquela que permite modificações
causando somente um impacto
considerado justo a outras partes do
sistema
Conhecer profundamente as
ferramentas é o primeiro passo
para poder fazer as perguntas
corretas ao enfrentar o cenário
de uma nova aplicação
Por onde começar?
Boas práticas de OO
TDD – Test-Driven Design
“Vale lembrar que precisamos de
mais de 10 mil horas, ou 10 anos,
para dominar uma linguagem”
Peter Norvig

Más contenido relacionado

Similar a Implementação, design ou arquitetura?

Dojo de programação - Dia de Java - UFSCar
Dojo de programação - Dia de Java - UFSCarDojo de programação - Dia de Java - UFSCar
Dojo de programação - Dia de Java - UFSCarLuiz Ribeiro
 
[CLPE] Design patterns com c#
[CLPE] Design patterns com c#[CLPE] Design patterns com c#
[CLPE] Design patterns com c#Felipe Pimentel
 
Lecture 5 :: Planejameto Temporal e Monitorização do Projeto
Lecture 5 :: Planejameto Temporal e Monitorização do ProjetoLecture 5 :: Planejameto Temporal e Monitorização do Projeto
Lecture 5 :: Planejameto Temporal e Monitorização do ProjetoRogerio P C do Nascimento
 
Por quê você deve utilizar TDD?
Por quê você deve utilizar TDD?Por quê você deve utilizar TDD?
Por quê você deve utilizar TDD?Wellington Moreira
 
Workshop Rational Team Concert - RTC - Planejamento - aula 01
Workshop  Rational Team Concert - RTC - Planejamento - aula 01Workshop  Rational Team Concert - RTC - Planejamento - aula 01
Workshop Rational Team Concert - RTC - Planejamento - aula 01Wise Systems
 
Combatendo code smells em aplicações Java
Combatendo code smells em aplicações JavaCombatendo code smells em aplicações Java
Combatendo code smells em aplicações JavaEmmanuel Neri
 
Revolucao Agile - UFSCar
Revolucao Agile - UFSCarRevolucao Agile - UFSCar
Revolucao Agile - UFSCarLuiz Ribeiro
 
Shift left DevOps Experience
Shift left DevOps ExperienceShift left DevOps Experience
Shift left DevOps ExperienceWalter Coan
 
Planeamento Temporal E Monitorização do Projecto de SW
Planeamento Temporal E Monitorização do Projecto de SW Planeamento Temporal E Monitorização do Projecto de SW
Planeamento Temporal E Monitorização do Projecto de SW Rogerio P C do Nascimento
 
Integração dados prática ppt
Integração dados prática pptIntegração dados prática ppt
Integração dados prática pptRodrigo Ribeiro
 
A24 paper - perfil business intelligence - o momento de sair da rotina por ...
A24   paper - perfil business intelligence - o momento de sair da rotina por ...A24   paper - perfil business intelligence - o momento de sair da rotina por ...
A24 paper - perfil business intelligence - o momento de sair da rotina por ...BIBrasil
 
A24 paper - perfil business intelligence - o momento de sair da rotina por ...
A24   paper - perfil business intelligence - o momento de sair da rotina por ...A24   paper - perfil business intelligence - o momento de sair da rotina por ...
A24 paper - perfil business intelligence - o momento de sair da rotina por ...Marcelo Krug
 
Modelagem Dimensional
Modelagem DimensionalModelagem Dimensional
Modelagem DimensionalMarco Garcia
 
TDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
TDC2016 Boas Práticas SQL em Banco Relacional para DesenvolvedoresTDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
TDC2016 Boas Práticas SQL em Banco Relacional para DesenvolvedoresFernando Franquini
 
O Projecto, Gestão de Projectos e o Gestor de Projectos - Parte 1
O Projecto, Gestão de Projectos e o Gestor de Projectos - Parte 1O Projecto, Gestão de Projectos e o Gestor de Projectos - Parte 1
O Projecto, Gestão de Projectos e o Gestor de Projectos - Parte 1Pedro De Almeida
 
Treinamento - Product Owner - CLARO-NET-EMBRATEL
Treinamento - Product Owner - CLARO-NET-EMBRATELTreinamento - Product Owner - CLARO-NET-EMBRATEL
Treinamento - Product Owner - CLARO-NET-EMBRATELDaniel Calmazini
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaEduardo Bregaida
 

Similar a Implementação, design ou arquitetura? (20)

Dojo de programação - Dia de Java - UFSCar
Dojo de programação - Dia de Java - UFSCarDojo de programação - Dia de Java - UFSCar
Dojo de programação - Dia de Java - UFSCar
 
[CLPE] Design patterns com c#
[CLPE] Design patterns com c#[CLPE] Design patterns com c#
[CLPE] Design patterns com c#
 
Lecture 5 :: Planejameto Temporal e Monitorização do Projeto
Lecture 5 :: Planejameto Temporal e Monitorização do ProjetoLecture 5 :: Planejameto Temporal e Monitorização do Projeto
Lecture 5 :: Planejameto Temporal e Monitorização do Projeto
 
Por quê você deve utilizar TDD?
Por quê você deve utilizar TDD?Por quê você deve utilizar TDD?
Por quê você deve utilizar TDD?
 
Workshop Rational Team Concert - RTC - Planejamento - aula 01
Workshop  Rational Team Concert - RTC - Planejamento - aula 01Workshop  Rational Team Concert - RTC - Planejamento - aula 01
Workshop Rational Team Concert - RTC - Planejamento - aula 01
 
Combatendo code smells em aplicações Java
Combatendo code smells em aplicações JavaCombatendo code smells em aplicações Java
Combatendo code smells em aplicações Java
 
Revolucao Agile - UFSCar
Revolucao Agile - UFSCarRevolucao Agile - UFSCar
Revolucao Agile - UFSCar
 
Shift left DevOps Experience
Shift left DevOps ExperienceShift left DevOps Experience
Shift left DevOps Experience
 
Planeamento Temporal E Monitorização do Projecto de SW
Planeamento Temporal E Monitorização do Projecto de SW Planeamento Temporal E Monitorização do Projecto de SW
Planeamento Temporal E Monitorização do Projecto de SW
 
Estimativas cef 2000
Estimativas cef 2000Estimativas cef 2000
Estimativas cef 2000
 
Integração dados prática ppt
Integração dados prática pptIntegração dados prática ppt
Integração dados prática ppt
 
Solid works 2007
Solid works 2007Solid works 2007
Solid works 2007
 
A24 paper - perfil business intelligence - o momento de sair da rotina por ...
A24   paper - perfil business intelligence - o momento de sair da rotina por ...A24   paper - perfil business intelligence - o momento de sair da rotina por ...
A24 paper - perfil business intelligence - o momento de sair da rotina por ...
 
A24 paper - perfil business intelligence - o momento de sair da rotina por ...
A24   paper - perfil business intelligence - o momento de sair da rotina por ...A24   paper - perfil business intelligence - o momento de sair da rotina por ...
A24 paper - perfil business intelligence - o momento de sair da rotina por ...
 
Modelagem Dimensional
Modelagem DimensionalModelagem Dimensional
Modelagem Dimensional
 
TDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
TDC2016 Boas Práticas SQL em Banco Relacional para DesenvolvedoresTDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
TDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
 
O Projecto, Gestão de Projectos e o Gestor de Projectos - Parte 1
O Projecto, Gestão de Projectos e o Gestor de Projectos - Parte 1O Projecto, Gestão de Projectos e o Gestor de Projectos - Parte 1
O Projecto, Gestão de Projectos e o Gestor de Projectos - Parte 1
 
Treinamento - Product Owner - CLARO-NET-EMBRATEL
Treinamento - Product Owner - CLARO-NET-EMBRATELTreinamento - Product Owner - CLARO-NET-EMBRATEL
Treinamento - Product Owner - CLARO-NET-EMBRATEL
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completa
 
DDD > Experiências
DDD > ExperiênciasDDD > Experiências
DDD > Experiências
 

Más de David Robert Camargo de Campos

Más de David Robert Camargo de Campos (12)

Evolução cultural - Criando Times de Alto Desempenho
Evolução cultural - Criando Times de Alto DesempenhoEvolução cultural - Criando Times de Alto Desempenho
Evolução cultural - Criando Times de Alto Desempenho
 
Evolução cultural - Criando times de alto desempenho
Evolução cultural - Criando times de alto desempenhoEvolução cultural - Criando times de alto desempenho
Evolução cultural - Criando times de alto desempenho
 
Introdução ao kotlin
Introdução ao kotlinIntrodução ao kotlin
Introdução ao kotlin
 
O uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin
O uso de PWA e o futuro do desenvolvimento mobile com React Native e KotlinO uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin
O uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin
 
Evolução cultural: Criando times de alto desempenho no Elo7
Evolução cultural: Criando times de alto desempenho no Elo7Evolução cultural: Criando times de alto desempenho no Elo7
Evolução cultural: Criando times de alto desempenho no Elo7
 
Times de Alta Performance
Times de Alta PerformanceTimes de Alta Performance
Times de Alta Performance
 
Programando em Go
Programando em GoProgramando em Go
Programando em Go
 
An introduction to programming in Go
An introduction to programming in GoAn introduction to programming in Go
An introduction to programming in Go
 
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
 
Como um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenhoComo um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenho
 
Construindo um sistema distribuido usando rest
Construindo um sistema distribuido usando restConstruindo um sistema distribuido usando rest
Construindo um sistema distribuido usando rest
 
Como um grande sistema REST funciona
Como um grande sistema REST funcionaComo um grande sistema REST funciona
Como um grande sistema REST funciona
 

Implementação, design ou arquitetura?

  • 2. Desenhar sistemas é uma tarefa difícil
  • 3. E, ainda fazer com que sejam escaláveis e performáticos, mantendo uma alta qualidade interna e externa, é um desafio!
  • 4. “Você deve enfrentar suas batalhas de design, sejam elas no nível macroarquitetural ou no humilde campo das instâncias” Craig Larman
  • 5. Qual é a diferença de design e arquitetura de software?
  • 6. design é feito em cima do que foi decidido pela arquitetura por isso o que faz parte da arquitetura é mais difícil de mudar
  • 7. “Alguns padrões podem ser chamados arquiteturais, já que representam decisões importantes sobre essas partes; outros são mais sobre design e o ajudam a implementar essa arquitetura” Martin Fowler
  • 8. “Alguns padrões podem ser chamados arquiteturais, já que representam decisões importantes sobre essas partes; outros são mais sobre design e o ajudam a implementar essa arquitetura” Martin Fowler “Não faço nenhuma forte tentativa de separar esses dois, uma vez que aquilo que é arquitetural ou não é subjetivo”
  • 9. '
  • 10. “o termo arquitetura envolve a noção dos principais elementos do sistema, as peças que são mais difíceis de mudar”
  • 11. Arquiteturas são as decisões que gostaríamos de ter tomado no começo do projeto Ralph Johnson (do GoF)
  • 16. Uma vez que somente implementações são concretas, todo tipo de mudança implica em conhecer a implementação!
  • 19. public class Conta { private BigDecimal saldo = BigDecimal.ZERO; private BigDecimal limite = BigDecimal.ZERO; private Cliente titular; private int numero; private Calendar dataAbertura; public void setNumero(int numero) { this.numero = numero; } public void setDataAbertura(Calendar dataAbertura) { this.dataAbertura = dataAbertura; } public int getNumero() { return numero; } public Calendar getDataAbertura() { return dataAbertura; } …
  • 20. public class Conta { private BigDecimal saldo = BigDecimal.ZERO; private BigDecimal limite = BigDecimal.ZERO; private Cliente titular; private int numero; private Calendar dataAbertura; public Conta(int numero, Calendar dataAbertura) { setNumero(numero); setDataAbertura(dataAbertura); } private void setNumero(int numero) { this.numero = numero; } private void setDataAbertura(Calendar dataAbertura) { this.dataAbertura = dataAbertura; } public int getNumero() { return numero; }
  • 21. public class Conta { private BigDecimal saldo = BigDecimal.ZERO; private BigDecimal limite = BigDecimal.ZERO; private Cliente titular; private int numero; private Calendar dataAbertura; public Conta(int numero, Calendar dataAbertura, BigDecimal saldoInicial, MaisUmMonteDeParametros... ) { setNumero(numero); setDataAbertura(dataAbertura); setSaldo(saldoInicial); … } private void setNumero(int numero) { this.numero = numero; } private void setDataAbertura(Calendar dataAbertura) { this.dataAbertura = dataAbertura; }
  • 22. public class TestaBuilder { public static void main(String[] args) { Conta conta = ContaBuilder.novaConta() .comNumero(456) .comDataDeAbertura(2012, 04, 20) .eDepositoInicial("100") .toConta(); conta.saca(new BigDecimal("50")); System.out.println(conta.getSaldo()); } }
  • 23. Uma boa implementação, design ou arquitetura: É aquela que permite modificações causando somente um impacto considerado justo a outras partes do sistema
  • 24. Conhecer profundamente as ferramentas é o primeiro passo para poder fazer as perguntas corretas ao enfrentar o cenário de uma nova aplicação
  • 25. Por onde começar? Boas práticas de OO TDD – Test-Driven Design
  • 26. “Vale lembrar que precisamos de mais de 10 mil horas, ou 10 anos, para dominar uma linguagem” Peter Norvig