Hallo,
Mag een set method valideren?
Stel we hebben een product en we willen aan dat product een productnummer toevoegen.
<?php
$product = new Product();
$product->setProdNr('ABC1234');
?>
De vraag is of deze setProdNr method (of iedere set method in het algemeen) mag valideren of de input klopt.
In het voorbeeld gaat het nu om een productnummer, maar in de praktijk heeft een product nog meer eigenschappen die gavalideerd moeten worden. Denk bijvoorbeeld aan de productnaam. Is het een string, en bestaat die string uit minimaal 3 tekens? Nou ja, zo zijn er dus een heleboel dingen die gevalideerd moeten worden.
Mijn simpele vraag is, mag een setter eigenlijk wel iets valideren?
Stel dat het product gevalideerd is, en hiervoor hebben 10 controles plaatsgevonden. Vervolgens slaan we de gegevens op in de database. De volgende keer halen we het product op uit de database en via de mapper worden alle gegevens keurig weer geset. MAAR... opnieuw vinden er nu 10 controles plaats, want die controles zijn onderdeel van de set methods!
Mijn stelling is dan ook: een set method mag geen input valideren en alle input moet gevalideerd worden door een validator object. Dit validator object maakt vervolgens een product aan.
Dan krijg je dus zoiets:
<?php
$pv = new ProductValidator();
$pv->setProdNr('ABC1234');
$product = $pv->createProduct();
// opslaan in database
$pm = new ProductMapper();
$pm->save($product);
// ophalen uit database
$pm->load('ABC1234'); // hier vindt dus geen validatie meer plaats
?>
Graag jullie reacties. Ik ben erg benieuwd!!!
3.667 views