Shared mutability
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Shared mutability

on

  • 168 views

Apresentação sobre Shared Mutability

Apresentação sobre Shared Mutability
Apresentada dia 17/04

Statistics

Views

Total Views
168
Views on SlideShare
168
Embed Views
0

Actions

Likes
0
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Shared mutability Presentation Transcript

  • 1. SharedMutability is pureevilAvoid it, bro!
  • 2. CacheObjetos em cache ajudam muito a vida daaplicação- Existem dois tipos de objetos em cache:- Único da sessão- Usuário, Relatório, Source- Divididos entre sessões- Campanha, oferta, produto
  • 3. CacheEstados de um objeto precisam ser alteradosna maioria das aplicações.- Único da sessão- Pode mudar que não dá xabú- Dividido entre sessões- Alteração no estado em uma sessãoinfluência outra sessão, causando erros lógicos
  • 4. Objetos imutáveisJá dizia o Java effective "Promova aimutabilidade"- Objetos imutáveis são seguros- Objetos imutáveis não tem estados obsoletos- Objetos imutáveis são thread safe- Objetos imutáveis são atômicos
  • 5. Objetos imutáveisCriar objetos imutáveis é de certa formasimples (ou não)public class UsuarioImutavel {private final String nome;private final Integer id;private final Calendar nascimento;private final Endereco endereco;public UsuarioImutavel(String nome, Integer id, Calendar nascimento, Endereco endereco) {this.nome = nome; this.id = id;this.nascimento = nascimento; this.endereco = endereco;}public Integer getId() { return id; }public String getNome() { return nome; }public Calendar getNascimento() { return nascimento; }public Endereco getEndereco() { return endereco; }
  • 6. Objetos imutáveisPossíveis FalhasPossíveis Soluçõespublic void exemplo2(UsuarioImutavel usuarioImutavel) {Calendar data = usuarioImutavel.getNascimento();data.add(Calendar.YEAR, 2);System.out.println(data.getTime());}public void exemplo1(UsuarioImutavel usuarioImutavel) {Endereco endereco = usuarioImutavel.getEndereco();endereco.setCEP("12345-678");}public Calendar getNascimento() {Calendar cloneCal = Calendar.getInstance();cloneCal.setTime(nascimento.getTime());return cloneCal;}Fazer classe Endereco imutável
  • 7. Objetos imutáveisObjetos imutáveis são seguros, porém tem umproblema críticoELES SÃO IMUTÁVEIS!
  • 8. Mutabilidade compartilhada- E se eu precisar mudar o estado de um objetodivido entre sessões?- Alteração em uma requisição muda ocomportamento de outra- Concurrent Exception- Comportamento imprevisível
  • 9. Possíveis soluçõesHíbridoCriar uma classe imutável com atributosmutáveis- Atributo mutável continua compartilhado!Clonar objeto na saída do cache- Atributos imutáveis são os mesmos mas osmutáveis são únicos para a sessão!Adserver Approved!
  • 10. Possíveis soluçõesBag of things- Criar um objeto auxiliar que sempreacompanha o objeto imutável- Objeto tem todos os atributos mutáveisnecessáriosCacheBag of things
  • 11. Possíveis soluçõesWrapperSolução chique baseada no pattern Decorator(um pouco modificado).- Proposta parecida com os Wrappers Javapadrão public class WrapperOferta {private final Oferta oferta;private String precoFormatado;public Oferta getOfertaImutavel() { return oferta; }public void mudaPreco(String novoPreco) { this.precoFormatado = novoPreco; }public String getPreco() { return precoFormatado; }}
  • 12. Qual è latuasoluzione?Mache!!