1 pièce(s) jointe(s)
Architecture de classes, découpage et héritage
Bonjour,
J'avais un souci dans une succession de classe Form => Validator, souci justifié par le fait que j'avais les propriétés:
Code:
1 2 3
| private $cntField = 0 ;
private $cntFilled = 0 ;
private $stillFill = 0 ; |
Définies au niveau Form mais calculées au niveau enfant.
J'ai résolu mon problème en n'en faisant qu'une seule classe de 324 lignes ???? , ce qui va dans le sens contraire de la philosophie OOP.
Ces 3 propriétés sont utilisées pour le diagnostic de la Form et le message en bas de celle-ci !
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| function getMsg() // Public car function appelée du formulaire...
{
//
// affichage du message inférieur
// ==============================
if ($this->debug)
user_error("getMsg[".$this->cntFilled."][".$this->cntField."][".$this->stillFill."]" , E_USER_NOTICE) ;
if ($this->isFormValid() )
{ if ($this->cntFilled)
if ($this->stillFill)
$this->msg = STILL ;
else
$this->msg = OK ;
else
$this->msg = VIDE ;
}
else
{ if ($this->cntFilled)
if ($this->stillFill)
$this->msg = STILL ;
else
$this->msg = KO ;
else
$this->msg = VIDE ;
}
return( $this->tabMsg[$this->msg] ) ;
} |
Sont calculées au niveau enfant (ex classe Validator)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| switch( $this->form[$i][self::Clas] )
{ case STRING : if ($this->ifFilled() )
if ($this->ifLength() )
return ( $this->valDatatype() ) ;
else
return ( $this->mustFill() ) ;
break ;
//
// bla bla bla
//
/**
* ifFilled
*
*/
function ifFilled()
{ if ($rc = ($this->value != NULL) == true)
$this->cntFilled++ ;
return( (bool) $rc ) ;
}
/**
* mustFill
*
*/
function mustFill() {
if ($this->must)
{ $this->msg = "Le champ[".$this->name."] doit être encodé !" ;
$this->stackMessage($this->msg) ;
$this->stillFill++ ;
}
return( (bool) $this->must) ;
} |
Or ma(s) classe(s) doive(ent) encore subir des extensions... ce qui va en faire un monstre inmaintenable si je les conserve d'une seule pièce !
J'en appelle à vous pour me montrer la bonne marche à suivre pour organiser les classes selon le modèle OOP de PHP5 !
Je vous mets la source en pièce attachée !
Merci à vous tous
Architecture de classes, découpage et héritage
Grand merci pour tes commentaires, cela aide !
Et de plus cela fonctionne....
En parlant de valDatatype, c'est cette fonction que j'avais écrite comme classe enfant et avec laquelle j'avais des problèmes avec les 3 propriétés en tête de mon 1er mail
Code:
1 2 3 4
|
private $cntField = 0 ;
private $cntFilled = 0 ;
private $stillFill = 0 ; |
Elles sont utilisés dans le parent et calculées chez l'enfant... hors si je ne me trompe pas, le méchanisme de l'héritage va des parents vers les enfants en PHP5.... et pas l'inverse comme dans Java et d'autres langages....
Alors la seule solution trouvée a été de faire une seule grande classe avec le tout !
Pas très OOP...
Si tu as une solution, je prends...
Merci en tout cas, c déjà bcp !