L'oggetto deve applicare le regole di convalida in lettura e scrittura?

0

Ho una classe che impone la formattazione adatta al database per alcune delle sue proprietà nel metodo __construct() .

Questo garantisce che se un nuovo oggetto viene creato e salvato, verrà salvato correttamente. Ma il salvataggio di nuovi oggetti avviene raramente. Recuperarli avviene migliaia di volte più frequentemente e queste stesse regole vengono applicate ai dati estratti da db quando attraversano __construct() , uno spreco di risorse.

Forse un po 'di regex non è qualcosa di cui dovrei preoccuparmi, ma mi dà fastidio. Sto facendo bene?

Se tutta questa roba viene applicata durante la fase di scrittura (scrittura), dovrei evitare di forzarla all'uscita (leggi)? E se sì, come? In caso contrario, perché no?

Potenziali problemi

  1. Nel caso in cui il database abbia dati memorizzati in modo errato, verrà pulito e travisato nel mio frontend.
  2. Se cambio i requisiti e aggiorno il codice di pulizia, vedi 1.

Ulteriori informazioni:

Sto salvando oggetti che rappresentano campi di database. Quindi sto memorizzando il loro tipo di dati (varchar, decimale, intero, ecc.), La dimensione ("25" o "9,2", ecc.), I valori predefiniti, l'annullabilità, ecc.

Quindi l'attributo name dell'oggetto deve essere conforme alle regole di denominazione MySQL (non può iniziare con un numero) più alcune regole che ho aggiunto solo per semplificare le cose (solo numeri, lettere ascii e "_"). Questo sarà usato come nome di colonna nelle tabelle.

Anche la "dimensione" deve corrispondere al tipo di dati.

Questo è tutto PHP e MySQL in esecuzione su Ubuntu.

    
posta Buttle Butkus 06.05.2016 - 00:57
fonte

2 risposte

1

Una buona regola è evitare di avere oggetti che si trovano in uno stato illegale.

Quindi creare oggetti basati su dati dal database che sono illegali (o che in realtà sono diventati illegali perché hai cambiato le regole) senza che nessuno se ne accorga sarebbe male.

Naturalmente sarebbe anche un male se nessuno fosse in grado di avviare il sistema perché un record da qualche parte non era legale, potrebbe rendere difficile il processo di correzione di quegli errori.

Quindi durante il caricamento dei dati raccolgono gli errori e li presentano agli utenti, in modo che possano correggerli. Se non carichi tutti i dati all'inizio, assicurati che gli utenti capiscano che quegli errori sono gli errori trovati in questa sezione, potrebbero essercene altri in altre sezioni.

Ciò renderebbe abbastanza facile individuare gli errori quando le regole cambiano e per correggerle il prima possibile.

    
risposta data 06.05.2016 - 13:47
fonte
0

Se i dati stanno uscendo dal tuo database, puoi [di solito] presumere che sia corretto. In primo luogo, ha attraversato un sacco di controlli per farlo passare, quindi ricontrollarlo di nuovo è [di solito] eccessivo.

Notare il bagliore di "di solito è sopra.

Non tutti dei dati che entrano nel tuo database lo fa attraverso le applicazioni e, anche se lo fanno, non tutte quelle applicazioni possono essere garantite per essere così rigorose nel loro controllo come potresti sperare. È quindi possibile ottenere dati nel database che possono essere considerati "errati". Se ricontrolla i dati sulla "via d'uscita" del database, non hai modo di restituire quei dati errati al "mondo esterno" dove qualcuno può fare qualcosa al riguardo.

Forse hai bisogno di un altro metodo "costrutto" che accetta un oggetto restituito dal tuo database (RecordSet, DataReader, ecc.) e popola l'istanza da quella (indipendentemente da ciò che viene fornita).

    
risposta data 06.05.2016 - 13:09
fonte

Leggi altre domande sui tag