1
resposta

Por que criar métodos com escopo específico?

No curso foi criado esse método em "PessoaController.js":

async pegaTodasAsPessoas(req, res){
    try{
      const listaTodasAsPessoas = await pessoaServices.pegaPessoasEscopoTodos();
      return res.status(200).json(listaTodasAsPessoas);
    }catch(erro){
      return res.status(500).json({ erro: erro.message });
    }
  }

Mas não seria melhor criar o método "pegaPorEscopo" em "Controller.js" que é genérico e herdado por todos controllers específicos?

async pegaPorEscopo(req, res) {
        try {
            // whitelist de scopes exposta pelo Service da entidade
            const scopesPermitidos = this.#scopesPermitidos();

            const scope = String(req.params?.scope || '').trim();

            // 422: sem escopo na rota
            if (!scope) {
                return res.status(422).json({
                    erro: 'Nenhum escopo foi informado na rota.',
                    dicas: { 'scopes permitidos': scopesPermitidos }
                });
            }

            // 422: escopo não permitido
            if (!scopesPermitidos.includes(scope)) {
                return res.status(422).json({
                    erro: 'Escopo inválido.',
                    detalhes: {
                        listagem: [
                            {
                                parametro: 'scope',
                                valorRecebido: scope,
                                dica: `Use um dos: ${scopesPermitidos.join(', ')}`,
                                tipo: 'valor_invalido'
                            }
                        ]
                    }
                });
            }

            // ✅ apenas aplica o escopo; não aceita query params (sem where/paginação)
            const registros = await this.entidadeService.pegaTodosOsRegistros({ scope });

            return res.status(200).json(registros);
        } catch (erro) {
            return res.status(500).json({ erro: erro.message });
        }
    }

Qual a melhor abordagem?

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
1 resposta

Olá Luidi! Tudo joia?

Essa é uma ótima pergunta e envolve boas práticas de design de software. Vamos explorar as duas abordagens:

  1. Métodos com escopo específico: Criar métodos específicos como pegaTodasAsPessoas pode ser vantajoso quando você deseja ter um controle mais detalhado sobre o comportamento de cada método. Isso permite que você adicione lógica específica para cada caso, como validações ou transformações de dados que são únicas para aquela entidade ou escopo. Além disso, métodos específicos podem ser mais fáceis de entender e manter, pois deixam claro o que cada parte do código faz.

  2. Método genérico pegaPorEscopo: Por outro lado, ter um método genérico em um controlador base pode promover a reutilização de código e reduzir a duplicação. Isso é útil quando você tem várias entidades que compartilham a mesma lógica de escopo. No entanto, essa abordagem pode se tornar complexa se cada entidade começar a ter requisitos específicos que não podem ser facilmente generalizados.

Qual é a melhor abordagem?

Depende do contexto do seu projeto. Se você está lidando com uma aplicação onde as regras de negócio são bastante homogêneas entre diferentes entidades, um método genérico pode ser mais eficiente e fácil de manter. No entanto, se cada entidade tem suas peculiaridades, métodos específicos podem ser mais apropriados.

Por exemplo, se no futuro você precisar adicionar uma lógica especial apenas para o escopo de "Pessoas", ter um método específico já preparado para isso pode facilitar a implementação.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.