2013-05-06 53 views
0

我有兩種類型的對象,稱它們爲Object1和Object2。每當我對這些對象進行CRUD更改時,我都會將更改記錄在特殊的「狀態」表中。我正在編寫處理每種類型對象的類,並已處理狀態。現在我有一個函數,將狀態數據與對象的類型一起傳遞,然後創建必要的數據庫插入,但是我想以某種方式將它寫入類中,但我不確定最佳做法。如何最好地寫一個類的方法來更新對象的狀態

我應該爲這些狀態創建第三個對象嗎?我應該在每個對象中創建複製&粘貼方法,這些方法執行相同的操作但使用不同的硬編碼措辭?我可以將兩個類都擴展爲第三類來給它們兩種狀態方法嗎?想到這個問題的

最好的辦法是我有一個汽車和卡車的對象。需要創建一個車庫方法,但是我可以將它作爲汽車和卡車對象的方法,還是它自己的對象,還是什麼?

回答

-1

IMOH(可能我是錯的,我敢肯定,我是),也就是做一個很好的辦法:

abstract class Base{ 
    protected $type = null; 
    public function setStatus($status){ 
     $sql = "UPDATE SET `status` = '$status' FROM `table` WHERE `type` = '{$this->type}'"; 
    } 
} 
class One extends Base{ 
    protected $type = "type1"; 
} 
class Two extends Base{ 
    protected $type = "type2"; 
} 

$one = new One(); 
$one->setStatus('pending'); 
$two = new Two(); 
$two->setStatus('died'); 

突然野生靜態的方式出現

abstract class Base { 
    protected static $type = null; 
    public static function setStatus($status){ 
     $sql = sprintf("UPDATE SET `status` = '$status' FROM `table` WHERE `type` = '%s'",static::$type); 
    } 
} 

class One extends Base{ 
    protected static $type = "one"; 
} 

class Two extends Base{ 
    protected static $type = "two"; 
} 

One::setStatus("idle"); 
Two::setStatus("dieing"); 
+0

保持業務邏輯和數據訪問層分開。我做的事情是一個靜態類,但對於很多人來說我覺得很多風格。 – 2013-05-06 19:44:12

+0

靜態方法也是一個很好的實現,我認爲現在每天的OOP被誤用和誤解很多,我看過很多使用OOP的程序員,就像它是一個有很多函數的盒子一樣。 – 2013-05-06 19:48:38

+0

我正在閱讀靜態方法。 – mrpatg 2013-05-06 19:54:55