Domanda

In Ruby on Rails, ogni entità modello ha un " validate_on_ qualcosa " metodo hook, che verrà chiamato prima che l'entità sia effettivamente mantenuta nel database. Vorrei funzionalità simili in Google App Engine. Sono consapevole che è possibile eseguire la convalida su singole proprietà passando loro argomenti nelle loro dichiarazioni. Tuttavia, se desidero fare più convalide di così, c'è un posto nella dichiarazione della classe del modello in cui posso farlo?

Inoltre, lungo le stesse linee, a volte un'entità deve essere modificata prima di essere effettivamente mantenuta nel database. Potrei aver bisogno di modificare (trasformare) l'entità prima che sia effettivamente scritta nel database. C'è un posto nella dichiarazione della classe di entità che mi consentirebbe di farlo?

Sono consapevole di poter mettere queste trasformazioni / convalide al di fuori della classe. Ma questo non sembra un buon design OO. Sembra davvero che ci dovrebbero essere metodi hook che verrebbero automaticamente chiamati in un modello per questo tipo di esigenze.

Quindi la mia domanda è: qual è il modo più appropriato per gestire la convalida e la trasformazione delle entità prima che persistano?

È stato utile?

Soluzione

La risposta migliore dipende dal tipo di trasformazioni che devi fare. Non ci sono metodi pre / post-put generalizzati per i modelli, ma ci sono molte altre opzioni:

  • Come hai detto, puoi passare le funzioni di validazione ai costruttori di classi di proprietà
  • È possibile utilizzare una classe di proprietà personalizzata che genera valori a livello di codice, ad esempio questo .
  • Puoi modificare le entità man mano che vengono archiviate al livello più basso usando api call hooks .

Altri suggerimenti

Stai utilizzando qualsiasi tipo di framework Web in cima alle API di un motore app non elaborato? Rails è un framework di altissimo livello. Hai mai guardato Django o qualcuno degli altri framework web? Potresti scoprire che quelli sono più vicini alle rotaie rispetto alle entità appengine non elaborate.

In alternativa, se vuoi qualcosa di inferiore , dai un'occhiata a questo articolo su ganci

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top