Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Porque uma classe separada para filtrar as fotos (a classe FiltroPorTitulo de 'fotos.pipes.ts') ???

Se eu entendi bem, a ideia de usar Orientação a Objetos seria a de unir o dado com o comportamento associado ao dado.

Então a lógica deveria ser no sentido de criar o método filtrar na classe FotoComponent - que possui o dado a ser filtrado. Ou não?

3 respostas
solução!

Em OO saber onde o comportamento entra é a tarefa mais difícil. Se tudo fosse entrar em FotoComponent está classe se tornaria uma god class violando SRP e outras boas práticas.

O filtro opera sobre uma coleção de dados e não sobre uma instância de FotoComponent. No máximo você poderia tentar adicionar o filtro como método estático mais ainda assim fereria o Single Respinsability Principle (SRP), aliás um dos princípios mais importantes de OO.

Sucesso e bom estudo.

Eu só vi até o fim da aula 5 do curso do Angular 2 - pt1. Não sei se a classe FiltroPorTitulo (foto.pipes.ts) evoluiu depois desse ponto.

Mas até aqui, o filtro opera não sobre uma coleção de dados genéricos, mas sobre uma coleção de fotos mesmo. Tanto é que o instrutor (aliás, muito bom por sinal) fez questão de tipar o retorno do método transform() para que retorna-se apenasum array de FotoComponent[].

export class FiltroPorTitulo implements PipeTransform{
    transform(fotos: FotoComponent[], digitado: string): FotoComponent[] {
        digitado = digitado.toLowerCase();
        return fotos.filter(foto => foto.titulo.toLowerCase().includes(digitado));
    }
}

Eu confesso que meu estilo de programação ainda é muito voltado a programação estruturada. Apesar de trabalhar com Java. (Alias, God Classes são comigo mesmo). Existe algum curso que possa ajudar a gente a incorporar o paradigma OO ? Porque os conceitos eu conheço (herança, interface, polimorfismo, etc). O problema pra mim é como utilizar esses conceitos fugindo da tradicional programação estruturada.

Valeu!

Tem um curso de SOLID na Alura. Já conferiu?

https://www.alura.com.br/curso-online-orientacao-a-objetos-avancada-e-principios-solid

É em Java, mas os conhecimentos podem ser utilizados com TypeScript, a linguagem utilizada pela Angular

Sucesso e bom estudo!