Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [BEST PRACTICE] Validazione dati.

    Uso DB_DataObject, un package PEAR.

    Per ogni tabella del database, il package genera automaticamente una classe, figlia della classe DB_DataObject, formando così il layer di persistenza.

    La classe DB_DataObject (e quindi anche tutte le classi figlie) ha un metodo validate() che esegue una semplice validazione dei dati distinguendo soltanto le stringhe dagli interi. E' possibile eseguire una validazione più approfondita ridefinendo le funzioni di validazione, ad esempio se sono nella classe Partecipante e voglio definire un criterio personalizzato per la validazione dello username, posso definire la funzione validateUsername() e all'interno fare tutti i controlli del caso per poi restituire TRUE nel caso in cui la validazione sia stata passata e FALSE in caso contrario.

    Adesso supponiamo invece che io mi trovi nella classe Pronostici, che contiene i pronostici inviati dai partecipanti su un certo evento sportivo. A tale classe, corrisponde una tabella che contiene semplicemente lo username del partecipante, l'identificativo dell'evento e il pronostico. Appare evidente che per validare lo username, devo controllare nella tabella Partecipante se quello username esiste, così come per validare l'identificativo dell'evento, devo controllare nella tabella Eventi se esiste un evento con quell'identificativo.

    Ecco quindi cosa faccio: all'interno del metodo validateUsername() della classe Pronostici, istanzio la classe Partecipante, eseguo un find(username) sull'istanza, eseguo un count() sull'istanza e se mi restituisce zero vuol dire che il partecipante non esiste e la validazione fallisce, se invece mi restituisce 1 allora ok la validazione dello username è passata.

    La domanda è: va bene? Cioè, è corretto all'interno di una classe dello strato di persistenza (Pronostici) includere un'altra classe dello strato di persistenza (Partecipante) al fine di poter condurre una validazione? Oppure sarebbe meglio eseguire i vari controlli nella logica di dominio, dopodichè se tutti i controlli sono passati, istanziare la classe Pronostico, valorizzarne gli attributi e invocare il metodo insert() sull'istanza?

    Ringrazio in anticipo tutti quanti mi aiuteranno.

  2. #2
    Direi che la seconda suona molto più giusta, forse ti conviene espandere la classe dei controlli.

    ciao
    Netcreative.it

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.