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

Improvisei na validação de código

Primeiramente criei um Helper:

class CodigoHelper {
    static validaCodigo(codigo){
        if(/\D{3}-\D{2}-\d{2}/.test(codigo)) {
            console.log("Código válido");
          return true;
        } else {
            console.log("Código inválido");
          return false;
        }
    }
}

Depois criei a classe Codigo dentro da pasta model:

class Codigo {

    constructor(texto) {

        if(!CodigoHelper.validaCodigo(texto)) throw new Error(`O texto ${texto} não é um código válido`);
            this._texto = texto;        
    }

    _valida(texto) {
        return CodigoHelper.validaCodigo(texto);
    }

    get texto() {
        return this._texto;
    }
}

Daí instanciei:

let code = new Codigo("JJJ-KK-99");

Funcionou perfeitamente. O que eu gostaria é de um feedback pra saber se essa abordagem esta legal. Abraço.

3 respostas

Edgar, tenho feedback sim, coisa legal para falar. Quando estiver no meu micro eu respondo com carinho. Aguarde.

solução!

Sua abordagem é válida sim, mas posso falar sobre um detalhe.

Vi que você isolou a lógica de validação do código em CodigoHelper, fazendo algo parecido com o que fizemos no curso com nosso DateHelper. Usou sabiamente a classe na classe Codigo para validar a string com o código passada no construtor.

O primeiro ponto é o seguinte. O código de validação será utilizado em outro local que não seja na própria classe Codigo? Veja que é uma lógica que opera do dado texto da classe Codigo. Sendo assim, não há necessidade de isolar a lógica de validação do código em uma classe em separado.

No caso do DateHelper, eu tive que fazer isso porque não fui eu quem criou a classe Date do JavaScript e a lógica de validação que opera sobre a data ficou em uma classe em separado.

Outro ponto é que em sua classe Codigo há o método privado _valida que não é chamado em nenhum lugar da sua classe. Pode removê-lo que não fará falta.

O principal você pegou é que a ideia de dado e comportamento caminharem juntos. Ou seja, onde tiver um objeto Codigo o comportamento de validação desse objeto caminha junto com o dado. Em qualquer lugar do seu sistema que for criar um Codigo a validação já será aplicada sem que você tenha que lembrar de chamar de um helper.

A divisão, ao meu ver, de DateHelper foi desnecessária porque essa regra só se aplica a Codigo. Mas Flávio, e se o método de validação de DateHelper fosse usado para validar um nome, por exemplo? Dai faz sentido isolá-la em uma classe para poder reutilizá-la.

Consegui explicar? Pegou a ideia?

Olá Flávio.

Com certeza, entendi perfeitamente. Muito obrigado pela explicação e dedicação de escreve-la.

Grande abraço.