2011-09-06 39 views
0

我對項目使用codeigniter,並且我有幾個有關設計實現的正確方法的問題。如何在OOP中正確授權此功能

我有一個「交易」類,基本作用是喜歡這個名字,過期,這筆交易說明交易的屬性等

最重要的是,我也有一個「運動」類處理與交易相關的外部事務,但並不真正與此相關。例如,一個活動可能包含頁眉和頁腳圖像,交易將被渲染的主題等。一次廣告系列一次只能有一筆交易,交易同樣如此。一旦交易到期,另一筆交易可能與同一活動有關。

「交易」和「廣告系列」的數據來自他們自己單獨的模型類(交易模型和CampaignModel)。

因爲我希望控制器只調用一個類來設置活動並處理視圖,我創建了一個名爲ViewManager的中間類,它創建適當的邏輯,並根據「Deals」類和「Campaign 「然後再發送給交給視圖的控制器。

現在,我在控制器中有一些功能需要直接訪問模型類。我想知道是否應該將此功能委託給ViewManager類並讓它處理它,因爲它具有模型的實例,或者應該在控制器中創建模型的新實例並直接調用它。

它只是感覺就像我把更多的功能委託給ViewManager一樣,代碼越容易混淆。

回答

1

這聽起來像是一個不好的MVC實現。特別是模型部分。

從你所描述的,它看起來像DealsCampaign類實際上是Domain Object和數據訪問對象的合併。它們是Domain Model應該使用的結構。而這個領域模型應該包含額外的功能。

整個問題來自CodeIgniter中呈現的MVC的錯誤實現。 ActiveRecord不能代替真正的模型。這個錯誤迫使業務邏輯進入控制器甚至是視圖。我責怪RoR。

P.S ..哦..和類似Managare的名字通常被認爲是代碼味道