Software Craftsmanship
Sommaire
- Introduction- Présentation dans le builder
- Exemple d'un module utilisant l'architecture hexagonale
- L'impact sur la couche model
Les impacts sur la couche modèle
Dans les autres templates, on a tendance à deporter une partie de l'application sur le module et le modèleDans ce nouveau template, on centraliste tout dans la couche business
Vérification des données pré-enregistrement
Avant
Dans les autres templates, pour verifier la cohérence des données avant de les enregistrerNous créons une méthode isValid dans la couche model ainsi par exemple
private function getCheck(){
$oPluginValid=new plugin_valid($this->getTab());
$oPluginValid->isNotEmpty('monChamp','Le champ ne doit pas être vide');
/* renseigner vos check ici
$oPluginValid->isEqual('champ','valeurB','Le champ n\est pas égal à '.$valeurB);
$oPluginValid->isNotEqual('champ','valeurB','Le champ est égal à '.$valeurB);
$oPluginValid->isUpperThan('champ','valeurB','Le champ n\est pas supé à '.$valeurB);
$oPluginValid->isUpperOrEqualThan('champ','valeurB','Le champ n\est pas supé ou égal à '.$valeurB);
$oPluginValid->isLowerThan('champ','valeurB','Le champ n\est pas inférieur à '.$valeurB);
$oPluginValid->isLowerOrEqualThan('champ','valeurB','Le champ n\est pas inférieur ou égal à '.$valeurB);
$oPluginValid->isEmpty('champ','Le champ n\'est pas vide');
$oPluginValid->isNotEmpty('champ','Le champ ne doit pas être vide');
$oPluginValid->isEmailValid('champ','L\email est invalide');
$oPluginValid->matchExpression('champ','/[0-9]/','Le champ n\'est pas au bon format');
$oPluginValid->notMatchExpression('champ','/[a-zA-Z]/','Le champ ne doit pas être a ce format');
*/
return $oPluginValid;
}
public function isValid(){
return $this->getCheck()->isValid();
}
public function save(){
if(!$this->isValid()){
return false;
}
parent::save();
return true;
}
Avec la classe business
L'idée étant de centraliser l'intelligence de l'application, il en est de même quant à la cohérence des données.Nous avons donc une méthode dans la classe business pour verifier la même chose:
public function getCheck($tParam_) {
$this->_oValid->load($tParam_);
foreach ($this->_tColumn as $sColumn) {
$this->_oValid->isNotEmpty($sColumn, $this->tr('errorIsEmpty'));
}
return $this->_oValid;
}
Et au lieu de l'appeler au moment du save, nous l'appelons au début de l'appel insert/update
public function insertItem($oObject,$tParam_) {
$oValid = $this->getCheck($tParam_);
if (!$oValid->isValid()) {
return $this->sendReturn(false, array('tError' => $oValid->getListError()));
}
Trigger à l'update et/ou à l'insert
Avant
Auparavant nous ajoutions dans la méthode save de la classe row_maTable du code par exemple
public function save(){
if(!$this->isValid()){
return false;
}
//on ajoute l'enregistrement de la date
$this->date_update = date('Y-m-d H:i:s');
parent::save();
return true;
}
Avec la classe business
Toujours dans l'idée de centraliser les traitements, nous ajouterons ceci dans la méthode approprié
public function updateItem($id_, $tParam_) {
$oValid = $this->getCheck($tParam_);
if (!$oValid->isValid()) {
return $this->sendReturn(false, array('tError' => $oValid->getListError()));
}
$oObject=$this->_oModel->findByID($id_);
$tColumn=array( 'title', 'description');
foreach ($tColumn as $sColummn) {
$oObject->$sColummn = $tParam_[$sColummn];
}
//on ajoute l'enregistrement de la date
$oObject->date_update = date('Y-m-d H:i:s');
$this->_oModel->update($oObject);
return true;
}
note: on peut ainsi facilement différencier ce que l'on fait en cas d'insertion/mise à jour, en modifiant la méthode adéquate
Par exemple:
public function insertItem($oObject_,$tParam_) {
$oValid = $this->getCheck($tParam_);
if (!$oValid->isValid()) {
return $this->sendReturn(false, array('tError' => $oValid->getListError()));
}
$tColumn=array( 'title', 'description');
foreach ($this->_tColumn as $sColummn) {
$oObject_->$sColummn = $tParam_[$sColummn];
}
//on ajoute l'enregistrement de la date
$oObject_->date_insert = date('Y-m-d H:i:s');
$oObject_->date_update = $oObject_->date_insert;
$this->_oModel->insert($oObject_);
return true;
}