2016-02-22 56 views
0

我目前正在尋找重新設計我的web應用程序的功能。 Web應用程序使用Yii(版本1)作爲後端。Yii中的MVC實現1

在這種情況下,我有一個模型和控制器。該模型用於存儲所有用戶跟蹤數據,並且適當地爲userTracking模型,但模型的實際邏輯位於名爲UserController的控制器中。我有一個名爲actionTrackUser($ id)的函數,用於爲特定用戶實現各種跟蹤邏輯併爲該用戶創建一個模型。

但是我現在需要將這個功能從UserController推斷到一個單獨的trackingController,它將實現各種模型的跟蹤。

但是,我需要能夠在新控制器和舊控制器中使用此功能。我想知道Yii 1中最好的方法是正確實現MVC。我想過要製作一個trackingModel並讓userTracking模型擴展它,但是爲了在兩個地方使用它,我會在模型中有很多業務邏輯。

我對MVC和Yii相當陌生,所以我想知道最好的方法嗎?

我故意將代碼留在這個問題之外,因爲它更多的是關於在Yii中實現這種功能的理論問題。

任何幫助表示讚賞。

謝謝!

+1

你不能單獨在PHP中執行「MVC」。只要忘掉這個術語,並根據[SOLID原則](https://en.wikipedia.org/wiki/SOLID_(object-oriented_design))編寫可測試的解耦代碼。 – PeeHaa

+0

但是,在這種情況下,謝謝你,我不能重寫原來的代碼,因爲它有點像一個黑盒子,由另一個開發人員開發。我可以將控制器代碼提取到模型中,但它仍然需要在兩個地方調用,我覺得使用模型來實現這一點是不正確的方法,但我無法想到另一個解決方案。謝謝@PeeHaa – liamjnorman

+0

那麼你說的問題不能回答,因爲代碼沒有任何東西,並且永遠不會與MVC有任何關係。 – PeeHaa

回答

0

我不確定可能有「最佳」方法。但是,您需要選擇一種最適合您的方法。以適合您情況的方式爲指導,以及將來爲您和其他人制定可管理的代碼。

您當前的用戶跟蹤模型和控制器沒有任何問題。您聲明「模型的實際邏輯在控制器中」。您可能需要重新考慮將適當的數據管理,約束和驗證規則移至模型中。

您可以將函數移動到單獨的trackingController並仍然使用userTracking模型。沒有規則說你必須有一個匹配的模型和控制器集合,並且控制器很可能一次管理更多的一個模型。

我通常從activeRecord模型開始,這些模型映射到數據存儲(大多數情況下是數據庫表)。我使用相應的表單模型來反映與activeRecord模型明顯不同的表單,並使用領域模型來反映功能豐富的複雜業務對象,並反映了大量運行時屬性(如計算字段)和狀態數據(如發佈狀態,它們是從其他領域計算出來的 - 例如用戶可以擁有驗證狀態,付費狀態,活動狀態,帳戶級別等,這些都可以協同工作以指示用戶可以進行哪些活動)。