2010-06-04 78 views
1

你好我试图从移动过程编程路程,同时对设计模式有更好的理解。我想知道什么设计模式可以最好地代表下面的代码。这是一个if else语句,基本上是根据一天中的时间输出一个值。这只是我在代码中的几个if/else if语句的示例。哪种OOP模式适合(迭代器,单例,工厂..)?PHP OOP编程 - 如何申请

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不会取代'if ... else'。代码当然可以被改进,但是如何将它应用到OOP中取决于这个代码片段如何适用于系统的其他部分,以及它应该如何重用。 – deceze 2010-06-04 01:39:20

+0

该代码只会在基本显示国家指标的地图小部件上使用一次。 ajax会调用这段代码,以便根据时间显示相应的指标 – neitony 2010-06-04 11:53:34

回答

3

我不知道你是否需要应用任何特定的设计模式。只有在您尝试解决特定问题时才应使用设计模式,并且设计模式满足您的需求。我不认为你在这里有这样的问题 - 我认为你的代码工作正常,在这种情况下,你可以像这样离开它。

对象面向编程是不是应用设计模式来一切 - 多少你的代码仍然会同样写到你的程序的风格,但它会面向周围的物体

也就是说,我认为有一点空间让我们改善这里。你重复的代码公平一点这里只是写小时 /小时

我会重构,要看上去就像这样:

$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'      
    );   

这将增加“S”只有在需要它,而不要重复你的代码太多。

+0

谢谢,您已经清理了很多,而您是对的,我可以将三元条件添加到代码中。万分感激! – neitony 2010-06-04 11:50:13