Convalida e generazione di errori quando si utilizza il pattern Data Mapper

3

Sto lavorando per salvare lo stato di un oggetto in un database utilizzando il pattern del mapper dei dati, ma sto cercando suggerimenti / indicazioni sulla fase di validazione e generazione dei messaggi di errore (passaggio 4 sotto). Ecco i passaggi generali come li vedo per fare questo:

(1) Il data mapper viene utilizzato per ottenere informazioni correnti (array associato) sull'oggetto

in db:

+=====================================================+  
|  person_id  |   name   |   favorite_color   |  age  |  
+=====================================================+  
|   1         |   Andy   |   Green            |  24   |   
+-----------------------------------------------------+

il mapper restituisce un array associativo, ad es. Person_Mapper :: getPersonById ($ id):

$person_row = array(
    'person_id' => 1,
    'name' => 'Andy',
    'favorite_color' => 'Green',
    'age' => '24',
);    

(2) il costruttore dell'oggetto Person prende questo array come argomento, popolando i suoi campi.

class Person {

    protected $person_id;
    protected $name;
    protected $favorite_color;
    protected $age;

    function __construct(array $person_row)
    {
        $this->person_id = $person_row['person_id'];
        $this->name = $person_row['name'];
        $this->favorite_color = $person_row['favorite_color'];
        $this->age = $person_row['age'];
    }

    // getters and setters...

    public function toArray()
    {
        return array(
            'person_id' => $this->person_id,
            'name' => $this->name,
            'favorite_color' => $this->favorite_color,
            'age' => $this->age,
        );
    }
}

(3a) (Richiesta GET) Gli input di un modulo HTML che viene utilizzato per modificare le informazioni sulla persona vengono popolati usando Person :: getters

<form>
    <input type="text" name="name" value="<?=$person->getName()?>" />
    <input type="text" name="favorite_color" value="<?=$person->getFavColor()?>" />
    <input type="text" name="age" value="<?=$person->getAge()?>" />
</form>

(3b) (richiesta POST) L'oggetto Person è stato alterato con i dati POST usando Person :: setters

$person->setName($_POST['name']);
$person->setFavColor($_POST['favorite_color']);
$person->setAge($_POST['age']);

* (4) Convalida e generazione di messaggi di errore su base per ogni campo
    - Questo dovrebbe avvenire nell'oggetto persona o nell'oggetto mappatore persona?
    - I dati devono essere convalidati PRIMA di essere inseriti nei campi dell'oggetto della persona?

(5) Il mappatore dei dati salva l'oggetto persona (aggiorna la riga nel database):

$person_mapper->savePerson($person);
// the savePerson method uses $person->toArray() 
// to get data in a more digestible format for the 
// db gateway used by person_mapper

Qualsiasi suggerimento, suggerimento, critica o denominazione sarebbe molto apprezzato.

    
posta AndyPerlitch 12.10.2012 - 23:29
fonte

1 risposta

3

Penso che dovresti definire nell'oggetto persona - e non nell'oggetto mappatura - la logica di convalida.

Ottieni i dati POST e li assegni all'oggetto persona, e se c'è qualche errore, dovrebbe succedere lì, prima di raggiungere il passo mappign. In effetti, non devi mai chiamare savePerson () quando i dati forniti non sono corretti.

    
risposta data 13.10.2012 - 01:08
fonte

Leggi altre domande sui tag