2013-07-15 36 views
-1

我遠不是MVC的V領域的專家,最近一直在嘗試不同的觀點,我目前試用的那個可能甚至不是具有名稱的正確視圖,而是我想出的。我在MVC應用程序中使用了什麼類型的視圖?

在我的應用程序中,Customer可以發送Request(傳送請求)到Courier。 的Request有4種狀態:

  1. 發送
  2. 取消:
  3. 拒絕
  4. 接受

我有一個RequestView延伸我的View。我將Request實體注入到我的RequestView構造中,並根據RequestRequestView中的哪個狀態將選擇適當的模板。

RequestView有一個像一些方法:通過調用

echo $this->getStateText(); 

在我只用一個INTEGER與國家工作Request實體

protected function getStateText() { 

    switch($this->request->getState()) { 
    case Request::STATE_SENT: 
     return 'Sent'; 
    case Request::STATE_CANCELLED: 
     return 'Cancelled'; 
    case Request::STATE_REJECTED: 
     return 'Rejected'; 
    case Request::STATE_ACCEPTED: 
     return 'Accepted'; 
    default: 
     return 'Error'; 
    } 
} 

,我可以在我的模板然後用當我處於表示層時,沒有人希望以數字格式查看狀態,因此他們希望在文本中看到當前狀態,這就是爲什麼我在表示層中而不是實體本身中使用getStateText()方法的原因。我的思考/推理在這裏是否正確?

我目前的實施是好還是壞?這種類型的視圖是否有名字?

謝謝。

+0

我從來沒有聽說過這種類型的具有特定名稱的看法。所以你有一個View對象的方法,然後你擴展它的不同類型的視圖?你的觀點如何構建?我是我的經驗,視圖通常留給大多數HTML或其他類似的結構,只需最少的編碼。視圖模板然後接收它可以使用的變量。所以我想,而不是擴大你的觀點有一個特定的結構,你就送視圖中的對象,將在正確的位置呼應getStateText()公共職能。當然,取決於您的整個MVC結構。 – juuga

+0

你可能要問這對http://codereview.stackexchange.com/,因爲這實際上不是一個特定的編程問題 – Pevara

回答

1

首先,爲什麼模板內的$this指向一個視圖?然後再次,當我使用單詞「模板」時,我的意思是this

而且,我很困惑的觀點背後注射Request實例的原因。如果視圖需要來自模型層的數據,則應該只查詢它的數據。然後,如果您在該視圖中有一些共享的可視化邏輯,則可以簡單地將其分離到合適的presentation object

那些表現對象(福勒稱他們爲「演示模型」,我覺得這只是增加了混亂),然後就可以用來生產值,是隨時可以應用到模板。

而這些都與MVVM沒有任何關係。當您更換控制器時,ViewModel就是您在該模式下使用的。一般而言,這並未觸及觀點。此外,MVVM模式更接近MVP,然後是其他任何東西。這是你會得到什麼,如果你添加MVP,一個監控器,頁面控制器,然後讓別人,誰崇拜的Rails,動搖了這一切。

至於命名你目前有,可惜我只會將其標記「的SRP違反」和保持它戳。

我的2美分

0

這種類型的視圖是否有名稱?

您正在冒險朝向MVVM(Model-View-ViewModel)。

我目前的實施是好還是壞?

根據您所展示的內容,我認爲您的問題是分開的,因此我認爲您的表現很好。

我會做的一件事就是將getStateText邏輯放在另一個類中(例如RequestStateToTextTransformer =>transformreverseTransform方法)。

爲什麼?那麼,也許你想在其他地方以不同的格式顯示請求實體。您目前必須在不同的ViewModel中複製getStateText代碼。有了變壓器,就沒有重複。

+0

感謝我在想如何停止代碼重複,我從來沒有聽說過這些變壓器。你有進一步解釋他們的好鏈接嗎? – ibanore

+0

我想到的例子是Symfony2數據轉換器。看看上http://symfony.com/doc/current/cookbook/form/data_transformers.html#creating-the-transformer一個例子 – simshaun

相關問題