Implementação, design ou arquitetura?

26
Implementação, design ou arquitetura?

description

Uma discussão sobre as diferentes facetas de um software

Transcript of Implementação, design ou arquitetura?

Page 1: Implementação, design ou arquitetura?

Implementação, design ou arquitetura?

Page 2: Implementação, design ou arquitetura?

Desenhar sistemas é uma tarefa difícil

Page 3: Implementação, design ou arquitetura?

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?

“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?

Qual é a diferença de design e arquitetura de software?

Page 6: Implementação, design ou arquitetura?

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?

“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?

“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?

'

Page 10: Implementação, design ou arquitetura?

“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?

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?
Page 13: Implementação, design ou arquitetura?
Page 14: Implementação, design ou arquitetura?
Page 15: Implementação, design ou arquitetura?
Page 16: 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!

Page 17: Implementação, design ou arquitetura?
Page 18: Implementação, design ou arquitetura?
Page 19: 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; }

Page 20: 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 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?

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?

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?

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?

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?

Por onde começar?

Boas práticas de OO TDD – Test-Driven Design

Page 26: Implementação, design ou arquitetura?

“Vale lembrar que precisamos de mais de 10 mil horas, ou 10 anos,

para dominar uma linguagem”

Peter Norvig