2010-06-04 6 views
1

Salut J'essaie de s'éloigner de la programmation procédurale et en même temps avoir une meilleure appréciation des modèles de conception. Je voudrais savoir quel Design Pattern peut le mieux représenter le code ci-dessous. C'est une instruction if else qui fournit une valeur basée sur l'heure du jour. Ceci est juste un exemple de plusieurs if/else if instruction que j'ai dans le code. Quel modèle de POO est approprié (Iterator, Singleton, Factory ..)?Programmation PHP OOP - Comment faire une demande

if($dayval == "Sun" && $date >= 0 && $date < 18) { 
    $timemax = 18; 
    $timeleft = ($timemax - $date); 
    if($timeleft == 1) { 
     $arr = array('tstatus' => 'Trading begins today at 6:00pm (less than '. $timeleft. ' hour to go) - have a great trade week!', 
        'tcode' => 'closed');       
    } 
    else { 
     $arr = array('tstatus' => 'Trading begins today at 6:00pm (less than ' .$timeleft. ' hours to go) - have a great trade week!', 
        'tcode' => 'closed'      
     );   
    } 
    echo json_encode($arr); 
} 

else if($dayval == "Sun" && $date >= 18 && $date < 19) { 
    $timemax = 19; 
    $timeleft = ($timemax - $date); 
    if($timeleft == 1) { 
     $arr = array('tstatus' => 'Asian Market opening in less than ' .$timeleft. ' hour', 
        'tcode' => 'closed');       
    } 
    else { 
     $arr = array('tstatus' => 'Asian Market opening in less than ' .$timeleft. ' hours', 
        'tcode' => 'closed'      
     );   
    } 
    echo json_encode($arr); 
+1

OOP ne remplace pas «if ... else». Le code pourrait certainement être amélioré, mais comment l'adapter à la POO dépend de la façon dont cet extrait s'insère dans le reste de votre système et comment il devrait être réutilisable. – deceze

+0

Le code ne sera utilisé qu'une seule fois sur un widget de carte qui affiche essentiellement un indicateur de pays. Un appel ajax serait fait à ce code pour l'indicateur approprié à afficher en fonction de l'heure – neitony

Répondre

3

Je ne sais pas si vous devez appliquer un motif de conception spécifique. Les motifs de conception ne doivent être utilisés que si vous avez un problème spécifique que vous essayez de résoudre, et que le motif de conception répond à vos besoins. Je ne pense pas que vous ayez un tel problème ici - je suppose que votre code fonctionne bien, auquel cas vous pouvez le laisser comme ça.

Object Oriented La programmation est pas sur l'application de modèles de conception à tout - une grande partie de votre code sera toujours écrit de façon similaire à votre style de procédure, mais il sera orienté autour de vos objets.

Cela dit, je pense qu'il y a de la place pour un peu d'amélioration ici. Votre répéter un peu de code ici juste pour écrire heure/heures.

Je factoriser que regarder de plus comme ceci:

$timeleft = ($timemax - $date); 
$arr = array('tstatus' => 'Trading begins today at 6:00pm (less than '. $timeleft. ' hour' . ($timeleft == 1) ? '' : 's' . ' to go) - have a great trade week!', 
       'tcode' => 'closed'      
    );   

qui ajoutera le « s » que si elle est nécessaire, sans dupliquer votre code trop.

+0

Merci qui éclaircit beaucoup, et vous avez raison je peux ajouter le ternaire conditionnel au code. Vraiment apprécié! – neitony