24-03-2008, 12:54 AM
(Modification du message : 24-03-2008, 08:06 PM par Sephi-Chan.)
Salut tout le monde,
En réécrivant la classe métier de Seelies au sujet des Vols, je me suis posé une question… Mieux vaut-il pour moi faire une requête (dans mon cas le constructeur) qui récupère un maximum d'informations, où plutôt créer une méthode qui fait une requête pour chercher la liste des membres du Vol et leur rôle, une pour lister les territoires du Vol, etc.
Mon intuition me dit de privilégier la lisibilité du code et sa modularité, mais je voulais votre avis sur la question.
Voilà le constructeur en l'état actuel. La requête est encore soft, mais j'ai de quoi bien la compliquer, mais ça me paraît pas bien propre de faire ça. Le coup du flag, ça va bien quand on n'a que peu de jointure, mais quand il y en aura 8, ça risque de devenir assez imbuvable…
En réécrivant la classe métier de Seelies au sujet des Vols, je me suis posé une question… Mieux vaut-il pour moi faire une requête (dans mon cas le constructeur) qui récupère un maximum d'informations, où plutôt créer une méthode qui fait une requête pour chercher la liste des membres du Vol et leur rôle, une pour lister les territoires du Vol, etc.
Mon intuition me dit de privilégier la lisibilité du code et sa modularité, mais je voulais votre avis sur la question.
Voilà le constructeur en l'état actuel. La requête est encore soft, mais j'ai de quoi bien la compliquer, mais ça me paraît pas bien propre de faire ça. Le coup du flag, ça va bien quand on n'a que peu de jointure, mais quand il y en aura 8, ça risque de devenir assez imbuvable…
Code PHP :
<?php
/*
* Get informations about the given flight if it is specified.
*/
public function __construct($flight = 0){
if($flight == 0){
/* Coming soon… :) */
}
else {
$query = sprintf(
"SELECT F.*, R.*
FROM flights F
LEFT JOIN flight_has_role FHR ON FHR.flight_id = F.flight_id
LEFT JOIN roles R ON R.role_id = FHR.role_id
WHERE F.flight_id = %d;",
(int) $flight
);
$sql = mysql_query($query);
if(mysql_num_rows($sql) >= 1){
$flag = NULL;
while($result = mysql_fetch_assoc($sql)){
/* These informations are the same for each row returned. */
$this->id = $result['flight_id'];
$this->name = $result['flight_name'];
$this->status = $result['status'];
$this->invitationDelay = $result['invitation_delay'];
/*
* These ones are different for each row,
* so we use a flag to differentiate each other.
*/
if($flag != $result['role_id']){
$this->roles[] = array(
'name' => $result['role_name'],
'description' => $result['role_description'],
'hierarchy' => $result['hierarchy'],
'quantityConstraint' => $result['quantity_constraint'],
'canEditPrivileges' => $result['can_edit_privileges'],
'canInvite' => $result['can_invite'],
'canDischarge' => $result['can_discharge'],
'votingValue' => $result['voting_value'],
);
$flag = $result['role_id'];
}
}
}
else { throw new Exception("Chosen Flight doesn't exist."); }
}
}
Je vous remercie d'avance,
Sephi-Chan, qui va faire plusieurs petites méthodes en attendant…