2
respostas

Não me soou bem

Penso que pode ser resolvido de formas melhores, vou rever outros cursos onde vi o conceito de OCP e também de Decorator, estes exemplos sobre criar novas classes me mostraram códigos repetidos, como os outros colegas que comentaram neste poste e em outros, creio que podia ser resolvido de formas melhores.

2 respostas

Olá Angelo

Entendo a sua preocupação em relação ao código repetido e a busca por melhores formas de resolver o problema. É sempre importante buscar aprimorar nossas habilidades e encontrar soluções mais eficientes.

No caso específico do exemplo que você mencionou, a mudança solicitada é registrar a data em que o artigo foi publicado. A alternativa correta para manter a estabilidade da classe seria a opção B:

public class NovaVersaoPublicacaoService : IPublicacaoService
{
  public void PublicaArtigo(int idArtigo)
  {
    var artigo = _dao.ArtigoPorId(idArtigo);
    artigo.Situacao = SituacaoArtigo.Publicado;
    artigo.DataPublicacao = DateTime.Now;
    _dao.Alterar(artigo);
  }
}

Essa alternativa cria uma nova classe que herda da interface IPublicacaoService e adiciona a funcionalidade de registrar a data de publicação. Dessa forma, evita-se a repetição de código e mantém-se a estabilidade da classe original.

Continue estudando e explorando diferentes formas de resolver problemas. Cada situação pode exigir abordagens diferentes e é sempre bom estar preparado para aplicar os princípios da programação orientada a objetos de forma eficiente.

Espero ter ajudado e bons estudos!

Otávio, obrigado pela resposta. Mas o ponto aqui não é este. Há uma outra aula onde o instrutor cria um decorator de classe, cria uma coisa extensa, mas eu entendi o motivo, ele queria, como ele enfatizou, permitir que a classe anterior pudesse continuar servindo para algum sistema legado, que precisasse usar a versão anterior. Isso não foi mencionado aqui neste exercício, mas posso inferir que esperam que pensemos da mesma forma, para justificar a resposta. No entanto minha reflexão é em um outro nível. O que é mais importante, manter um código protegido, ou manter o negócio protegido? O que é uma classe ou método instável, é algo que pode quebrar um teste ou código anterior que dependa dele? Não seria instável uma classe ou método que não faz o que o negócio precisa? Penso eu que manter versões de código que não fazem o que a empresa precisa atualmente é instável e um risco ao negócio, a chamada à versões que atendem requisitos obsoletos e ultrapassados pode prejudicar. Entendo, vai ser mudada a injeção lá no startup...neste projeto...e em outros projetos, o que impede que o código anterior que não atende ao cenário atual da empresa seja chamado? O que você acha disso?