Il DTO dovrebbe avere i validatori?

1

Credo che DTO dovrebbe essere il più semplice e facile possibile. Tuttavia, dopo il suggerimento del mio amico, l'opportunità di convalidare i dati impostati in DTO sembra allettante.

Diamo un esempio seguente:

//this class only holds bunch of objects from the future

class FooFuture{

    /** @var ArrayObject */
    $collection;

    (other fields ommited for readability)

    /**
     * @param ArrayObject $collection
     */
    public function __construct(ArrayObject $collection = null){

         if(null === $collection){
             $this->collection = new ArrayObject();
         } else {
             $this->collection = $collection;
         } 
    }

    /**
     * @param ArrayObject $col
     */
    public function setCollection(ArrayObject $col){

        $now = new DateTime();        

        foreach($col as $element){
            if($element->getDateTime() < $now){
                throw new InvalidArgumentException('Collection should only contain objects from the future');
            }
        }
    }

    /** 
     * @return ArrayObject
     */
    public function getCollection(){
         return $this->collection;
    }

}

Che ne pensi?

    
posta ex3v 09.09.2015 - 10:31
fonte

1 risposta

2

Anche se sono d'accordo che può essere utile avere una validazione per dto-s, penso che dto-s dovrebbe essere il più semplice possibile.

Puoi ottenere entrambe le funzioni se stai utilizzando un linguaggio di programmazione che supporta interfacce come java o c # e inserisci la logica di convalida in una classe separata che utilizza le interfacce.

Esempio

public interface IOrder { ... }

public class OrderDTO implements IOrder { ... }

public class OrderBuisinessObject implements IOrder { ... }

public class OrderValidator {
   void validate(IOrder anOrder) { ... }
}

Per rispondere alla tua domanda: per avere la convalida, ma non in dto

    
risposta data 09.09.2015 - 11:07
fonte

Leggi altre domande sui tag