Classe abstraite, interface ?
Posté : 22 janv. 2010, 15:03
Bonjour,
J'ai un petit soucis de conception objet...
Je souhaite créer un ensemble de classe permettant de générer des fichier à la norme CFONB (ce sont des fichiers qui permettent d'automatiser des groupes de virements bancaires).
J'ai donc pour l'instant deux types de fichiers, les CFONB 320 Caractères permettant de faire des virements internationaux, et des fichiers CFONB 160 Caractères permettant seulement des virements de la France vers la France.
Le principe général reste le même, récupérations d'informations sur l'émetteur et les destinataires, génération des lignes du fichier, puis envoi/sauvegarde.
Il n'y donc que deux choses qui changent:
J'ai abstrait la méthode qui sert à construire les lignes du fichier, afin d'obliger les classes filles à la redéfinir.
J'ai voulu faire de même avec les variables contenant les infos spécifiques aux champs de chaque type de fichier ( $_from_fields & $_to_fields)
Bon bien sûr ça ne fonctionne pas, le mot clé abstract est réservé aux méthodes d'une classe et à la classe elle-même!
Donc la question est: Est-ce que le modèle que j'ai ébauché est bon et viable? Avez-vous de meilleurs propositions?
Si vous avez des remarques toute bête sur la visibilité des variables/méthodes (public,protected, etc...) je vous en pris!
Ci-dessous les classes en question:
PS: si jamais vous avez des retours d'expèrience sur les gestion de fichiers CFONB/ETEBAC, etc... je suis preneur :-°
J'ai un petit soucis de conception objet...
Je souhaite créer un ensemble de classe permettant de générer des fichier à la norme CFONB (ce sont des fichiers qui permettent d'automatiser des groupes de virements bancaires).
J'ai donc pour l'instant deux types de fichiers, les CFONB 320 Caractères permettant de faire des virements internationaux, et des fichiers CFONB 160 Caractères permettant seulement des virements de la France vers la France.
Le principe général reste le même, récupérations d'informations sur l'émetteur et les destinataires, génération des lignes du fichier, puis envoi/sauvegarde.
Il n'y donc que deux choses qui changent:
- Les renseignements demandés sont différents pour l'un et l'autre fichiers
- La construction de chaque ligne du fichier est différente
J'ai abstrait la méthode qui sert à construire les lignes du fichier, afin d'obliger les classes filles à la redéfinir.
J'ai voulu faire de même avec les variables contenant les infos spécifiques aux champs de chaque type de fichier ( $_from_fields & $_to_fields)
Bon bien sûr ça ne fonctionne pas, le mot clé abstract est réservé aux méthodes d'une classe et à la classe elle-même!
Donc la question est: Est-ce que le modèle que j'ai ébauché est bon et viable? Avez-vous de meilleurs propositions?
Si vous avez des remarques toute bête sur la visibilité des variables/méthodes (public,protected, etc...) je vous en pris!
Ci-dessous les classes en question:
<?php
abstract class cfonb {
/**
* Variable qui contiendra toutes les lignes du fichier
*/
public $_lines=array();
/**
* Variable qui contiendra le contenu du fichier final
*/
public $_content='';
/**
* Variables contenant les champs obligatoires à la construction du
* fichier
*/
// Dans l'idéal, je voudrais abstraire ces variables
// Pour que les classes filles soient forcées de les redéfinir
public $_from_fields=array();
public $_to_fields=array();
/**
* Variables contenant les infos émetteur/destinataires
*/
public $_from=array();
public $_to=array();
/**
* cfonb::__construct
*
* Initialise les données utilisateur
*
* @param array $from Issuer informations
* @param array $to Adressees informations
* @return none
*/
public function __construct($from,$to){
// Vérification des entrées $from & $to,
// En fonction des tableau de valeurs
// $this->_to_fields & $this->_from_fields
// définits dans les classes filles
}
/**
* cfonb::buildLines
*
* Construit chaque ligne du fichier
*
* @param none
* @return none
*/
// Méthode à définir dans les classes filles, puisqu'elle
// Diffère celon la type de fichier à générer
abstract protected function buildLines();
/**
* cfonb::buildFile
*
* Assemble les lignes construites en un seul tenant
*
* @param none
* @return none
*/
public function buildFile($add_empty_end_line=true){
// ...
}
/**
* cfonb::getContent
*
* Retourne le contenu du fichier cfonb
*
* @param none
* @return string content of file
*/
public function getContent(){
return $this->_content;
}
/**
* cfonb::saveFile
*
* Enregistre le contenu du cfonb dans un fichier réel
*
* @param string $path Path to file
* @param string $content Replace $this->_content
* @return none
*/
public function saveFile($path, $content=''){
if(empty($content)){
$content = $this->_content;
}
if(!file_put_contents($path,$content)){
throw new Exception('Save the content of cfonb in '.$path.' failed!');
}
}
/**
* cfonb::send
*
* Enregistre le contenu du cfonb dans un fichier réel
*
* @param array $emails list of Addressees emails
* @param string $content Replace $this->_content
* @return none
*/
public function send($emails, $content=''){
// ...
}
}
// Virements internationaux
class cfonb320 extends cfonb {
public $_from_fields=array(
// Champs présents pour le fihcier cfonb 320 caractères
);
public $_to_fields=array(
// Champs présents pour le fihcier cfonb 320 caractères
);
public function buildLines(){
// Construction de chaque ligne du fichier
}
}
// Virements français
class cfonb160 extends cfonb {
public $_from_fields=array(
// Champs présents pour le fihcier cfonb 160 caractères
);
public $_to_fields=array(
// Champs présents pour le fihcier cfonb 160 caractères
);
public function buildLines(){
// Construction de chaque ligne du fichier
}
}
Merci d'avance pour vos lumières PS: si jamais vous avez des retours d'expèrience sur les gestion de fichiers CFONB/ETEBAC, etc... je suis preneur :-°