Pergunta

Em Ruby on Rails, cada entidade modelo tem um "validate_on_ algo " método de gancho, que será chamado antes de a entidade está realmente persistiu ao banco de dados. Gostaria funcionalidade semelhante no Google App Engine. Estou ciente de que você pode fazer a validação em propriedades individuais passando argumentos para eles nas suas declarações. No entanto, se eu quiser fazer mais de validação do que isso, há algum lugar dentro da declaração de classe modelo dentro do qual eu posso fazer isso?

Além disso, ao longo das mesmas linhas, por vezes, uma entidade precisa de modificação antes que ela seja realmente persistiu ao banco de dados. Eu talvez seja necessário modificar (transformar) a entidade direita antes que ela seja realmente escrito ao banco de dados. Existe algum lugar na declaração da classe entidade que permita-me a fazê-lo?

Estou ciente de que eu posso colocar essas transformações / validações fora da classe. Bu este não parece ser um bom design OO. Realmente parece que deve haver métodos de gancho que seria automaticamente chamados em um modelo para este tipo de necessidades.

Então, minha pergunta é, qual é a forma mais adequada para lidar com a validação e transformação de entidades antes que eles são persistentes?

Foi útil?

Solução

A melhor resposta depende de que tipo de transformações que você precisa fazer. Não há nenhuma generalizada pré / pós métodos colocadas para modelos, mas existem várias outras opções:

  • Como você mencionou, você pode passar funções de validação de construtores de classe Propriedade
  • Você pode usar uma classe propriedade personalizada que gera valores de programação, tais como esta .
  • Você pode modificar entidades como eles são armazenados no nível mais baixo usando ganchos de chamada api .

Outras dicas

Você está usando qualquer tipo de framework web no topo do app engine api matéria de? Rails é um framework de alto nível. Você já olhou para Django ou qualquer um dos outros frameworks web? Você pode encontrar esses são mais perto de trilhos que entidades AppEngine matérias.

Como alternativa, se você quiser algo menor nível, ter um olhar para este artigo em ganchos

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