implementação, design ou arquitetura?
DESCRIPTION
Uma discussão sobre as diferentes facetas de um softwareTRANSCRIPT
![Page 1: Implementação, design ou arquitetura?](https://reader033.vdocuments.net/reader033/viewer/2022060121/55935d211a28ab54648b4642/html5/thumbnails/1.jpg)
Implementação, design ou arquitetura?
![Page 2: Implementação, design ou arquitetura?](https://reader033.vdocuments.net/reader033/viewer/2022060121/55935d211a28ab54648b4642/html5/thumbnails/2.jpg)
Desenhar sistemas é uma tarefa difícil
![Page 3: Implementação, design ou arquitetura?](https://reader033.vdocuments.net/reader033/viewer/2022060121/55935d211a28ab54648b4642/html5/thumbnails/3.jpg)
E, ainda fazer com que sejam escaláveis e performáticos, mantendo uma alta qualidade interna e externa, é um desafio!
![Page 4: Implementação, design ou arquitetura?](https://reader033.vdocuments.net/reader033/viewer/2022060121/55935d211a28ab54648b4642/html5/thumbnails/4.jpg)
“Você deve enfrentar suas batalhas de design, sejam elas no nível macroarquitetural ou no humilde campo das instâncias” Craig Larman
![Page 5: Implementação, design ou arquitetura?](https://reader033.vdocuments.net/reader033/viewer/2022060121/55935d211a28ab54648b4642/html5/thumbnails/5.jpg)
Qual é a diferença de design e arquitetura de software?
![Page 6: Implementação, design ou arquitetura?](https://reader033.vdocuments.net/reader033/viewer/2022060121/55935d211a28ab54648b4642/html5/thumbnails/6.jpg)
design é feito em cima do que foi decidido pela arquitetura
por isso o que faz parte
da arquitetura é mais difícil de mudar
![Page 7: Implementação, design ou arquitetura?](https://reader033.vdocuments.net/reader033/viewer/2022060121/55935d211a28ab54648b4642/html5/thumbnails/7.jpg)
“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
![Page 8: Implementação, design ou arquitetura?](https://reader033.vdocuments.net/reader033/viewer/2022060121/55935d211a28ab54648b4642/html5/thumbnails/8.jpg)
“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”
![Page 9: Implementação, design ou arquitetura?](https://reader033.vdocuments.net/reader033/viewer/2022060121/55935d211a28ab54648b4642/html5/thumbnails/9.jpg)
'
![Page 10: Implementação, design ou arquitetura?](https://reader033.vdocuments.net/reader033/viewer/2022060121/55935d211a28ab54648b4642/html5/thumbnails/10.jpg)
“o termo arquitetura envolve a noção dos principais elementos do sistema, as peças que são mais
difíceis de mudar”
![Page 11: Implementação, design ou arquitetura?](https://reader033.vdocuments.net/reader033/viewer/2022060121/55935d211a28ab54648b4642/html5/thumbnails/11.jpg)
Arquiteturas são as decisões que gostaríamos de ter tomado no começo do projeto
Ralph Johnson (do GoF)
![Page 12: Implementação, design ou arquitetura?](https://reader033.vdocuments.net/reader033/viewer/2022060121/55935d211a28ab54648b4642/html5/thumbnails/12.jpg)
![Page 13: Implementação, design ou arquitetura?](https://reader033.vdocuments.net/reader033/viewer/2022060121/55935d211a28ab54648b4642/html5/thumbnails/13.jpg)
![Page 14: Implementação, design ou arquitetura?](https://reader033.vdocuments.net/reader033/viewer/2022060121/55935d211a28ab54648b4642/html5/thumbnails/14.jpg)
![Page 15: Implementação, design ou arquitetura?](https://reader033.vdocuments.net/reader033/viewer/2022060121/55935d211a28ab54648b4642/html5/thumbnails/15.jpg)
![Page 16: Implementação, design ou arquitetura?](https://reader033.vdocuments.net/reader033/viewer/2022060121/55935d211a28ab54648b4642/html5/thumbnails/16.jpg)
Uma vez que somente implementações são concretas,
todo tipo de mudança implica em conhecer a implementação!
![Page 17: Implementação, design ou arquitetura?](https://reader033.vdocuments.net/reader033/viewer/2022060121/55935d211a28ab54648b4642/html5/thumbnails/17.jpg)
![Page 18: Implementação, design ou arquitetura?](https://reader033.vdocuments.net/reader033/viewer/2022060121/55935d211a28ab54648b4642/html5/thumbnails/18.jpg)
![Page 19: Implementação, design ou arquitetura?](https://reader033.vdocuments.net/reader033/viewer/2022060121/55935d211a28ab54648b4642/html5/thumbnails/19.jpg)
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; }
…
![Page 20: Implementação, design ou arquitetura?](https://reader033.vdocuments.net/reader033/viewer/2022060121/55935d211a28ab54648b4642/html5/thumbnails/20.jpg)
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; }
![Page 21: Implementação, design ou arquitetura?](https://reader033.vdocuments.net/reader033/viewer/2022060121/55935d211a28ab54648b4642/html5/thumbnails/21.jpg)
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; }
![Page 22: Implementação, design ou arquitetura?](https://reader033.vdocuments.net/reader033/viewer/2022060121/55935d211a28ab54648b4642/html5/thumbnails/22.jpg)
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()); }
}
![Page 23: Implementação, design ou arquitetura?](https://reader033.vdocuments.net/reader033/viewer/2022060121/55935d211a28ab54648b4642/html5/thumbnails/23.jpg)
Uma boa implementação, design ou arquitetura:
É aquela que permite modificações causando somente um impacto
considerado justo a outras partes do sistema
![Page 24: Implementação, design ou arquitetura?](https://reader033.vdocuments.net/reader033/viewer/2022060121/55935d211a28ab54648b4642/html5/thumbnails/24.jpg)
Conhecer profundamente as ferramentas é o primeiro passo para poder fazer as perguntas corretas ao enfrentar o cenário
de uma nova aplicação
![Page 25: Implementação, design ou arquitetura?](https://reader033.vdocuments.net/reader033/viewer/2022060121/55935d211a28ab54648b4642/html5/thumbnails/25.jpg)
Por onde começar?
Boas práticas de OO TDD – Test-Driven Design
![Page 26: Implementação, design ou arquitetura?](https://reader033.vdocuments.net/reader033/viewer/2022060121/55935d211a28ab54648b4642/html5/thumbnails/26.jpg)
“Vale lembrar que precisamos de mais de 10 mil horas, ou 10 anos,
para dominar uma linguagem”
Peter Norvig