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)
Uma vez que somente
implementações são concretas,
todo tipo de mudança implica em
conhecer a implementação!
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

Implementação, design ou arquitetura?

  • 1.
  • 2.
    Desenhar sistemas éuma tarefa difícil
  • 3.
    E, ainda fazercom que sejam escaláveis e performáticos, mantendo uma alta qualidade interna e externa, é um desafio!
  • 4.
    “Você deve enfrentarsuas batalhas de design, sejam elas no nível macroarquitetural ou no humilde campo das instâncias” Craig Larman
  • 5.
    Qual é adiferença de design e arquitetura de software?
  • 6.
    design é feitoem cima do que foi decidido pela arquitetura por isso o que faz parte da arquitetura é mais difícil de mudar
  • 7.
    “Alguns padrões podemser 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 podemser 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 arquiteturaenvolve a noção dos principais elementos do sistema, as peças que são mais difíceis de mudar”
  • 11.
    Arquiteturas são asdecisões que gostaríamos de ter tomado no começo do projeto Ralph Johnson (do GoF)
  • 16.
    Uma vez quesomente 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, designou 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? Boaspráticas de OO TDD – Test-Driven Design
  • 26.
    “Vale lembrar queprecisamos de mais de 10 mil horas, ou 10 anos, para dominar uma linguagem” Peter Norvig