Come organizzare il codice che converte da un tipo all'altro

2

Se ho una classe DateRange , e voglio tradurre un DateRange in SQL (ad esempio some_col >= '2015-3-5' AND some_col <= '2015-3-5' ), dove dovrei inserire il metodo che traduce? Nulla di ciò che ho visto finora sembra molto buono.

Opzione 1: metti un metodo nella classe DateRange. (Lato negativo: accoppiamento ravvicinato della classe DateRange e SQL?)

class DateRange {
    public function toSQL ($colName) {...}
}

Opton # 2: crea una classe che contiene solo un metodo?

class DateRangeTranslator {...}

Opzione n. 3: una funzione autonoma

function dateRangeToSQLWhereCondition (DateRange $dr, $colName) {...}

Mi sto appoggiando all'opzione n. 2. Ma c'è un modo migliore?

EDIT:

È un po 'noioso, ma ecco cosa ho ora:

class DateRangeSQLBuilder {
    public $dateRange;
    public function buildWhereCondition ($colName) {...}
}

E lo useresti in questo modo:

$dateRange = new DateRange($fromDate, $toDate);
$builder = new DateRangeSQLBuilder($dateRange);
$whereConditions[] = $builder->buildWhereCondition('runDate');
    
posta AmadeusDrZaius 05.03.2015 - 10:28
fonte

2 risposte

1

Vorrei andare con la funzione. Come hai detto tu, la prima opzione introduce troppo accoppiamento. L'opzione 2 sembra a posto, ma dal momento che probabilmente la tua classe non dovrà mantenere lo stato, andrò con l'opzione tre.

In caso di dubbio, vai con la soluzione facile / stupida;).

    
risposta data 05.03.2015 - 11:12
fonte
2

tl; dr answer: NON.

PHP supporta query parametrizzate; sfruttare al massimo le loro capacità sia per gestire tutti i dettagli di implementazione di conversione delle date tra i moduli PHP e SQL, perché sarà più veloce e molto più solido di quanto non sia il tuo.

Inoltre, ottieni automaticamente protezione dagli attacchi SQL injection che non avevi prima.

link

    
risposta data 05.03.2015 - 12:34
fonte

Leggi altre domande sui tag