---
# System prepended metadata

title: 99 bottles - Cap. 5. separando as responsa

---

# 99 bottles - Cap. 5. separando as responsa

### Johny

- As 'receitas' de refatoração não prometem a entrega de código que expressam melhor o problema, apenas facilitam criar esta nova expressão e revertê-la;
- Squint Test;
- Possuir vários métodos que levam o mesmo argumento é um code smell;
- Erros de nomenclatura dificultam identificar code smell;
- A regra de "nomear as coisas um nível acima de abstração" se aplica mais a métodos do que a classes. Métodos são nomeados pelo que significam, classes pelo que são;
- a receita _Extract Class_, de Martin Fowler, dá-se conectando uma classe antiga a uma nova, e então um por vez, a receita move atributos e então métodos;
- O objetivo das refatorações _Primitive Obsession/Extract Class_ são criar criar objetos mais inteligentes para substituir seu primitivo. Por definição, este objeto tem conhecimento tanto do valor do primitivo e seu comportamento associado;
- Passo-a-passo para remover um argumento usando mudanças de uma linha:
    - altere a definição do método para mudar o nome do argumento, e providencie um padrão;
    - mude todos sender da mensagem para remover o parâmetro;
    - delete o argumento da definição de método (container(number) => container).
- objetos imutáveis são fáceis de entender, nunca começam de uma forma e se transformam, fazendo de seus testes mais baratos e fáceis de entender. Támbem são _thread safe_ ("You can't break shared state if shared state doesn't change"). Benefícios de imutabilidade são tantos que se fossem gratuitos você usaria sempre;
- "There are only two hard things in Computer Science: cache invalidation and naming things" Karlton, Phil.

### dalvi
- condicional pra escolher o objeto correto > condicional com comportamento
- nomear metodos pelo que eles significam e classes pelo que elas sao

### Bruno

- Squint Test;
- Immutable Objects;
- Condicionais que selecionam o objeto correto x Condicionais que implementam comportamentos distintos (Talvez esteja faltando mais classes no seu domínio);
- Primitive Obsession;
- Pequenas mudanças;
- Em OO ideias são como objetos físicos na realidade;
- Nem sempre eh necessário seguir o TDD.

### Gabs
- Squint test
- argumentos com o mesmo conceito
- Primitive Obsession
- Extract Class
- "better to finish horizontal refactoring"

### Igor

- Primitives x Smart objects
- Nomear coisas em um um nível acima de abstração funciona mais com métodos que com classes.
- a melhor estrategia é escrever o codigo mais simples possivel e medir sua performance assim que terminar.
- A bênção dessas técnicas é que a alteração do código em pequenos incrementos restringe severamente o número de erros que qualquer alteração pode introduzir.
- Evite cache, use objetos imutaveis e trate a criação de objetos como se fosse de graça
- Imutabilidade / intro a funcional
- Mutações e caching são complicados
- Cache é facil. Dificil é saber quando o estado dele deve ser atualizado.
- Não sacrifique a legibilidade antes de ter dados de desempenho sólidos.