/// <summary> /// Realiza a validação da mensagem /// </summary> /// <param name="parametros"></param> /// <returns></returns> public ValidarMensagemResponse ValidarMensagem(ValidarMensagemRequest parametros) { // Referencia para a mensagem e para o tipo da mensagem object mensagem = parametros.Mensagem; Type tipoMensagem = mensagem.GetType(); // Cria um contexto de validação ContextoValidacaoInfo contextoValidacao = new ContextoValidacaoInfo() { CodigoSessao = parametros.CodigoSessao, Mensagem = parametros.Mensagem, TipoMensagem = tipoMensagem }; // Pega lista de regras associadas a esse tipo // Chama os geradores de sequencia de regras para esse tipo if (_geradoresPorTipo.ContainsKey(tipoMensagem)) { foreach (IGeradorRegra geradorRegra in _geradoresPorTipo[tipoMensagem]) { geradorRegra.GerarSequencia(contextoValidacao); } } // Faz a chamada das regras contextoValidacao.MensagemValida = true; foreach (RegraBase regra in contextoValidacao.RegrasAValidar) { contextoValidacao.MensagemValida = regra.Validar(contextoValidacao) && contextoValidacao.MensagemValida; } // Se todas as regras não validaram, desfaz todas as validações if (!contextoValidacao.MensagemValida) { foreach (RegraBase regra in contextoValidacao.RegrasAValidar) { regra.Desfazer(contextoValidacao); } } // Retorna return (new ValidarMensagemResponse() { ContextoValidacao = contextoValidacao, Criticas = contextoValidacao.Criticas }); }
/// <summary> /// Método para realizar a validação da mensagem. /// </summary> /// <param name="contexto"></param> /// <returns></returns> public bool Validar(ContextoValidacaoInfo contexto) { return(OnValidar(contexto)); }
/// <summary> /// Método para desfazer uma validação /// </summary> /// <param name="contexto"></param> public void Desfazer(ContextoValidacaoInfo contexto) { OnDesfazer(contexto); }
/// <summary> /// Método virtual a ser sobrescrito pelas implementações de regras. /// </summary> /// <param name="contexto"></param> public virtual void OnDesfazer(ContextoValidacaoInfo contexto) { }
/// <summary> /// Método virtual a ser sobrescrito pelas implementações das regras. /// </summary> /// <param name="contexto"></param> /// <returns></returns> protected virtual bool OnValidar(ContextoValidacaoInfo contexto) { return(false); }