Separazione di preoccupazione. Metodi di accesso e sanificazione dei dati.

0

Ho una grande quantità di dati "sporchi" estratti da una richiesta API.

Prima dell'inserimento del database, pulisco un sacco di line feed e regex i valori come l'altezza e la larghezza dalle descrizioni degli articoli.

Questo è il mio primo grande progetto come ingegnere del software, e vorrei lasciare qualcosa di coerente per i futuri sviluppatori.

Ecco uno di questi esempi:

private function lineItemHeight($invoiceLineItem)
{
    if(preg_match("/(\d+mm W)|(\d+mm H)/", $invoiceLineItem, $matches) == 1)
    {
        $height = $matches[1];
        return preg_replace("/[^0-9,.]/", "", $height);
    }
    else
    {
        return 0;
    }
}

E un altro:

private function contactName()
{
    // Removes appended ([email protected]) from contact name
    return preg_replace('/\([^)]*\)/', "", $this->contactName);
}

Sarebbe meglio avere una classe SanatiseInvoiceData per analizzare tutte le stringhe prima che venissero impostate, oppure la mia pratica corrente è accettabile.

Sto cercando un settore o uno standard previsto. Ciò che ho funziona, non sapendo quanto bene regge il controllo, mi mette a disagio.

    
posta pcgben 18.04.2018 - 02:01
fonte

1 risposta

2

I record di analisi sono un problema di programmazione del pane e burro e ci sono almeno una dozzina di modi per farlo.

Il modo in cui mi è sempre sembrato il più chiaro, quando si mantiene un codice molto vecchio, è quando il programmatore si prende la briga di definire una classe che rappresenta un record o una riga stessa (ad esempio un Record class, non una RecordParser class). Ciò significa una classe di stato. Potrebbe assomigliare a questo:

class SanatisedInvoiceLineItem {
    private $text;

    function __construct($originalText) {
        $this->text = $originalText;
    }

   function getHeight()
   {
       if(preg_match("/(\d+mm W)|(\d+mm H)/", $this->text, $matches) !== 1)
       {
           return 0;
       }
       $height = $matches[1];
       return preg_replace("/[^0-9,.]/", "", $height);
    }  
}

Per usarlo:

$line = new SanitisedInvoiceLineItem($textFromApi);
$height = $line=>getHeight();

Note sulle coppie:

  1. La classe fornisce naturalmente uno spazio dei nomi, quindi i nomi delle funzioni possono diventare più brevi ( getHeight anziché lineItemHeight ).

  2. Puoi convalidare l'intero elemento pubblicitario nel costruttore, se lo desideri. Questo potrebbe essere più adatto della convalida di ogni campo separatamente.

risposta data 18.04.2018 - 04:01
fonte

Leggi altre domande sui tag