爲清楚起見考慮一個相當標準的「用戶註冊」功能:MVC和ORM - 哪個模型邏輯去哪裏?
我的ORM(波輪)允許您更改類ormUser,它擴展了ormUserBase,以引入自定義功能。
現在我已經將Propel與MVC框架耦合在一起了,我想知道從最佳實踐的角度出發,應該採用哪種邏輯。
對於我的用戶註冊功能我想創建:
這個RegistrationController - 它使用
的usermodel - 這反過來應該調用類似
- LoginView
- LogoutView
- SignupView
- ProfileView
的用戶數據庫表加上用戶概況,推動已產生的便利方法與這些表來工作。但是現在Propel的標準方法還不夠,我需要擴展功能。
哪裏可以正確地做到這一點?
請問我只延長ormUser新查詢的方法,並把非查詢邏輯在我的usermodel? 或者你會簡單地忽略ormUser和使用的usermodel的一切習慣,根據需要爲我的邏輯調用其它ormTableNameClass -s呢?
我知道在Propel中保留新方法在其他模型和控制器中具有可重用性的好處,但我不確定從「做得正確」的角度來看,因爲它似乎需要業務邏輯來確定結果某些查詢。
UPDATE:Using ORM classes directly from the controller in MVC, bad practice?展示瞭如何一個通常與行走,它在我的腦海裏重疊架構的模型......
這取決於你想添加的功能類型。你能給個例子嗎? –
當然 - 說我想創建一個公開的「顯示用戶配置文件的字母」視圖。我需要分頁邏輯和多個查詢,其中大部分都是Propel原生的,但是讓我們假設它們沒有被完全覆蓋。假設我在查詢本身中需要與數據庫不相關的邏輯。 我將在Propel中創建一個方法,該方法接受分頁的參數,從我的模型執行此方法並正在工作,還是我會在我的模型中完成所有工作? – MattW
在這種情況下,控制器應檢索按字母順序排列的用戶模型列表,並將該列表傳遞給視圖。該視圖然後構建用戶配置文件的實際列表的HTML輸出。我不知道Propel是如何工作的,但不應該將檢索邏輯添加到用戶模型中。理想情況下,您將創建一些與Propel交互的用戶存儲庫類,並且該類將負責從數據庫中檢索用戶對象。 –