O que é uma boa abordagem sobre como lidar com códigos de validação repetitivos e demorados?

StackOverflow https://stackoverflow.com/questions/1419619

  •  07-07-2019
  •  | 
  •  

Pergunta

Eu só recentemente começou a programação web e estou bastante surpreendido que, embora eu estou usando uma biblioteca de validação, eu ainda recebo 20-30 linhas de código para validação sozinho, sem contar as mensagens de erro e funções de retorno de chamada. Eu estou usando o framework Kohana MVC e eu queria saber se havia alguma maneira que eu posso encurtar os meus códigos de validação. Tentei pensar da seguinte

  1. colocar códigos de validação no meu modelo (que é bastante teve para um noob como eu).
  2. criação de um realmente pequena biblioteca para entradas Validate (algo que ganchos para a classe de validação, permitindo-me a chamar a biblioteca de procedimentos repetitivos como o registro do usuário, editar e outras coisas)

Ou há qualquer melhor e mais maneiras eficiente?

Foi útil?

Solução

Eu recomendo trabalhando em incluindo a validação do modelo. Uma vez que você é capaz de fazer um, qualquer outro que você criar será muito mais fácil. Além disso, se você tiver vários controladores tentando salvar esses dados, você não vai precisar recodificar a validação. Os docs Kohana conter alguns exemplos para integrar a biblioteca validação e ORM, você deve começar por aí.

Outras dicas

Eu uso Zend_Validate com Zend_Forms para validação no qual o código de validação é nas formas método init. Tudo o que tenho a fazer é passar um array de validadores para cada elemento e que run ..

$form->isValid($data);

... fora da forma para validar os dados.

A matriz de validação é facilmente mais de 30 linhas porque eu separar cada entrada de gama com uma nova linha. Mas eu acho que você vai ter que se você definir regras de validação de granulação fina para cada elemento de direito.

E a sua realmente fácil definir novos validadores em Zend.

Edit: Eu descobri uma estrutura que se estende do Zend Framework que permite que objetos de domínio para conter sua própria validação. Seu chamado quadro xistro mas eu não poderia fazê-lo funcionar na primeira tentativa, então eu não tentei depois disso.

Aqui está a minha estratégia para lidar com o código de validação. Suponho que por 'biblioteca de validação', quer dizer aqueles que apenas certifique-se um e-mail é um e-mail, números de telefone são numéricos, e não são regras de negócio na natureza.

A idéia é fazer com que cada código de regras de negócios como um functor - se for PHP, você pode obter apenas usando uma corda para definir a função; para outros idiomas, você pode ter que usar o padrão de estratégia. Definir uma interface para o functor (não é necessário para PHP) e despejá-lo em uma matriz.

Executar através da matriz que retornará sucesso, erro e um código de erro para um buffer. No final, examine o buffer de erro e determinar qual a validação falhou. Use-o para personalizar a visualização.

Aqui está um exemplo

$checkUniqueUserName = new CheckUniqueUserName();
$checkEmailNotUsed = new EmailNotUsed();
$validator = array();
$validator[$checkUniqueUserName->name()] = $checkUniqueUserName;
$validator[$checkEmailNotUsed->name()] = $checkEmailNotUsed;

$results = array();

foreach ($validator as $v)
{

  $result[$v->getValidatorName()] = $v->execute($userInfo);
}

class CheckUniqueUserName()
{

   public function execute($userInfo)
   {
       // SQL blah blah blah

      if ($bNameUnique)
        return array ('success' => 1)
      else
        return array ('success' => 0, 'error' => "$name is in used", 'error_code' => 'duplicate_name);

   }

}

No final, você terá uma matriz resultados, cada um preenchido com um processo de validação, e você sabe que falhou, e que não tem. Este pode então ser passado para o lado do cliente para processamento adicional, como destaque para os campos que falharam. O código_erro um ser usado para procurar a mensagem de erro adequada e formatação aplicada a ele.

Eu não estou realmente certo sobre o que você quer dizer com call-backs embora.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top