Funzioni di supporto - ingressi ben definiti o uscite ben definite?

1

Problema

In Codeigniter (framework PHP), sto cercando di creare una funzione helper che inserirà un comando ActiveRecord (per MySQL) in una catena di chiamate ActiveRecord esistenti. Il ragionamento per questo è che gli attuali comandi ActiveRecord disponibili non sono abbastanza affidabili e producono risultati diversi a seconda di quali parametri vengono passati.

Ad esempio:

$param = "";
$this->db->where('field', "");

produce

WHERE 'field' = ""

Ciò fornirebbe un set di risultati in cui sono stati restituiti solo campi vuoti .

Questo non è sempre il comportamento previsto, in quanto l'input proviene da un modulo Web e può essere il risultato di nessuna query specifica inviata, quindi tutti i risultati dovrebbero essere restituiti .

Soluzione tentata

Quello che ho deciso di inventare, era un metodo di supporto che prendesse una serie di input sconosciuti e restituisse un set di risultati che corrispondesse al mio comportamento desiderato (ad esempio, restituisce tutti i risultati o restituisce nessuno).

Utilizzando i casi di test e un metodo di test per astrarre l'insieme desiderato di input e output, speravo di produrre un metodo facile da chiamare per forzare i risultati del database nel mio comportamento desiderato. Ciò sarebbe più facile allora dire, forzare l'input in un tipo atteso e quindi utilizzare il comportamento inaffidabile dei comandi ActiveRecord di Codeigniter.

La mia preoccupazione principale, tuttavia, è che la mia funzione di aiuto potrebbe cercare di fare troppo: il mio collega l'ha descritto come un metodo magico che prende qualsiasi cosa e può avere dettagli di implementazione arcani. Sarebbe quindi meno leggibile rispetto alla convenzione ActiveRecord (che è più nota) e più difficile da mantenere.

La mia funzione è il modo migliore per farlo o ci sono alternative migliori là fuori?

    
posta xiankai 16.10.2013 - 05:56
fonte

1 risposta

2

Active Record è solo un CRUD modello ... mappa tabelle e colonne in un database per corrispondenti strutture dati in un linguaggio di programmazione e fornisce meccanismi di Creazione, Lettura, Aggiornamento ed Eliminazione. Ha poco a che fare con la logica aziendale, che è ciò che stai descrivendo.

Ogni metodo è un metodo "magico", secondo l'interpretazione del tuo collega. Un metodo è una scatola nera; tu passi i dati dei parametri, restituisce qualche output corrispondente. La logica in mezzo può essere quasi tutto.

Una volta dimostrata la logica di tale metodo, non dovresti preoccuparti della sua implementazione interna. In effetti, questa è la base per lo sviluppo basato sui test: dovresti essere in grado di cambiare l'implementazione sottostante e, se i tuoi test continuano a passare, l'applicazione dovrebbe comunque mostrare lo stesso comportamento.

Quindi, per essere chiari, il metodo di supporto è più un repository o un metodo di servizio. In realtà non ha molto a che fare con Active Record, ad eccezione del fatto che Active Record può essere utilizzato dal tuo metodo per recuperare i dati necessari.

Questo è l'intero punto dei metodi, per incapsulare un comportamento complesso. Il tuo approccio è totalmente valido.

    
risposta data 16.10.2013 - 06:06
fonte

Leggi altre domande sui tag