2011-03-28 82 views
1

我有一個類用作用於圖像的模型:要在模型中包含方法嗎?

class Image 
{ 
    public $imageId; 
    public $title; 
    public $description; 
    public $filename; 
    public $enabled; 
    public $galleryId; 
    public $galleryName; 
    public $orderNum; 
} 

我也有一類,ImageMapper其抓住關於從DB中的圖像的信息,並與適當的數據填充Image對象起來。我不會告訴你ImageMapper,因爲它是:-)

這裏一個非常討厭的一段代碼是我如何做到這一點的例子:

$image = new Image(); 
$image->imageId = $previouslyRetrievedId; 
$imageMapper = new ImageMapper(); 
$image = $imageMapper->find($image->imageId); 

我的問題是:我應該在哪裏有方法用於轉換關於圖像的信息。例如,Image類的$enabled屬性在數據庫中由0或1表示。當我在要由人類讀取的頁面上顯示該屬性時,我寧願顯示「否」或「是」 , 分別。我是否應該包含一個函數來轉換Image類中的ImageMapper類的值,該頁面向用戶或其他位置顯示「是」或「否」?

我聽說在數據對象中包含函數是不好的,這就是我所說的Image對象。

下面是該方法我指的一個例子:

public function getEnabledAsText() 
{ 
    if(!$this->enabled) { 
     return 'No'; 
    } 
    return 'Yes'; 
} 

回答

2

我可能會寫一個ImageDataPresenter類,並用它來將難看的Image屬性「翻譯」爲漂亮的人類可讀文本。

$presenter=new ImageDataPresenter($imageobj); 
echo $presenter->enabled; //'yes' 
+2

我原則上同意這一建議,但由於PHP沒有得到「朋友」類或同等學歷,圖像的成員都必須是公衆ImageDataPresenter在他們獲得。因此,在PHP中,我傾向於在Image類中至少提供setter和getter。 (我知道letseatfood已經讓它們全部公開,但總的來說,它們不應該沒有合理的理由而公開)。 – 2011-03-28 16:42:47

+1

@Colin Fine:我將所有屬性都保護起來(除非我確定它們不會被擴展),並使用'__get()'和'__set()''magic'方法來處理這個問題。我沒有提到它,因爲我認爲它超出了問題的範圍。 – dnagirl 2011-03-28 17:05:55

1

模型應該僅僅與數據源交互和數據源結果返回到控制器。

您應該在控制器中創建函數,或者應該將其創建爲助手並將值轉換爲顯示格式。

幫手只是幫助意見使用最小的邏輯。