I migliori metodi per tenere conto di un grande blocco di variabili?

2

La domanda sembra retrograda ma ho circa 50 variabili passate a una classe. Fondamentalmente una serie di dati che chiamo 'filtri' che sono passati prima a un prepFiltersMethod ($ filtri). Questo metodo di filtri di preparazione fa alcune cose imposta altri filtri necessari in altri metodi per le query. Restituisce un sottoinsieme più ampio di dati di $ filtri dopo aver ottenuto alcune cose aggiuntive ecc.

EDIT: Questo è COME per controllare il tipo di domanda, ho cercato di ripulire la domanda un po ', in breve mi chiedo come gestire un grande array di input in una classe. se i dati Junk vengono passati in esso o dati carenti, dovremmo provare a gestirlo. Quello che sto chiedendo è se hai una grande matrice che entra in una classe, faresti il passo in più per scriverla in un nuovo array per assicurarti che i dati di RIGHT siano usati per scopi di controllo? Eliminare le chiavi che non dovrebbero finire in esso ecc.? Dì, prendi l'array $ filters, scegli le chiavi che volevamo e scrivilo in un nuovo array, e poi usalo? In breve, mi chiedo se sarebbe utile usare un costruttore per fare questo o come gli altri dovrebbero gestire. Se non facciamo nulla, funziona bene, ma potrebbe essere un rischio più avanti lungo la strada?

PANORAMICA:

  • Diciamo che abbiamo un array multidimensionale chiamato $ filtri.
  • $ filtri è passato a una classe (contiene i dettagli di una richiesta utente).
  • Il La classe $ filters passa attraverso un metodo di preparazione che ne aggiunge altri elementi per questo array $ filters.
  • Ora che i filtri sono preparati e selezionato, verrà utilizzato per creare query e restituire risultati un altro metodo $ filtri sono passati al metodo getInventory che sembra ai filtri e crea una query e restituisce i dati dal DB.

DOMANDA:

Allo stato attuale, $ filters array viene passato intorno alla crescita e alla contrazione, se necessario. Tutto ciò che può essere passato alla classe senza gatekeeping, dovrebbe essere corretto? In altre parole, il metodo che prima prepara l'array $ filters, dovrebbe copiare le variabili in un nuovo array (ad esempio, creare un nuovo array)?

Qualcuno passa:

$filters['x']
$filters['y']
$filters['z']
... ... ...

abbastanza belli quelli sono tutti necessari / utilizzabili, ma cosa succede se passano in

$filters['x']
$filters['a']
$filters['b']
... ... ...

dove 'a' e 'b' non sono necessari?

Ci importa di questo? dovrei utilizzare qualcosa che garantisce che i dati di input siano più completi?

1) modello di builder? 2) creare un nuovo array e riscriverli? 3) Non ti preoccupare, lascia che gli altri metodi ignorino i dati di cui non ha bisogno? 4) Una classe standard che può ottenere e impostare 5) Un array globale nella classe $ this- > filters (odio questa idea) 6) Altre idee?

    
posta Mike Q 08.07.2018 - 15:38
fonte

1 risposta

3

Se ho ragione, hai a disposizione una serie di dati non strutturati, e dato che ora vedi questo causerà problemi, proverai a dargli qualche struttura locale solo per chiamare un metodo. Naturalmente, questo approccio potrebbe non valerne la pena.

Penso che l'unica soluzione sensata a questo sia aggiungere una struttura più ai tuoi dati non solo per prepFilters . Rendi il tuo $filters un DTO o una classe correttamente strutturata, magari strutturata gerarchicamente, sin dall'inizio. Un array o un dizionario non è la migliore struttura dati per trasmettere circa 50 diversi valori di tipo e scopo diversi, sezionarli in una manciata di classi piccole può rendere il codice molto più gestibile.

Gli attributi hanno bisogno di nomi propri e dovresti ricevere un errore dal compilatore o almeno dal sistema di runtime quando inserisci un errore di battitura in un nome di attributo e prova ad accedere ad un attributo non esistente.

In questo modo, le strutture dei dati rimangono estendibili e non devi pensare a quale ordine i dati arrivano o verranno restituiti. Diventerà molto più semplice passare parti specifiche dei dati nel tuo programma e prepFilters non sarà probabilmente l'unica funzione che trarrà vantaggio da questo.

    
risposta data 09.07.2018 - 19:49
fonte

Leggi altre domande sui tag