2012-01-05 16 views
3

我對ColdFusion ORM相當陌生,我有一些問題希望得到幫助。將ORM與嚴格的MVC框架結合使用

我正在使用一個非常標準和嚴格的MVC架構的框架。這個框架還有一個位於控制器和模型之間的「服務層」。服務層正在處理所有的業務邏輯和驗證。

標準CRUD過程是這樣的:

用戶通過視圖提交一個表單 - >視圖提交到控制器 - >控制器發送到服務層進行處理 - >服務層可以執行任何類型的業務邏輯和對請求的驗證 - >服務層然後將數據發送到模型 - >模型使用EntityNew()和EntitySave() - >模型運行事務,然後發回一個將ID迴應給服務層 - >服務層應用一些邏輯併爲用戶建立一條消息 - >服務層,而不是將響應消息發送給控制器 - >然後控制器將其發送給視圖 - >視圖然後將其顯示給用戶。

這個過程很好,我對角色分離感到滿意。它使所有的邏輯遠離視圖,控制器和模型,並將其隔離在服務層中。

我的問題是當我需要在服務層與數據庫進行通信時,例如檢查用戶名是否是唯一的以進行驗證,我該怎麼做?現在我只是在服務層中運行一個EntityLoad()。這似乎在技術上圍繞模型層,並通過ORM與數據庫直接連接。這會被認爲是打破了MVC框架。

另一件我不確定的事情是,如果我需要使用數據庫中的數據填充視圖中的下拉列表,我正在視圖中運行EntityLoad()以獲取下拉列表中的數據。再次,這在技術上是圍繞模型通過ORM與數據庫進行通信。

我想我只是混淆了在嚴格的MVC框架中使用ORM的最佳實踐。我應該在模型文件中爲每次與數據庫的交互使用單獨的方法,然後讓視圖或服務層與模型中的這些方法進行通信?當我試圖像那樣思考時,所有事情的組織都似乎失去了。

只是試圖圍繞這一點我的思想。

任何有關這個問題的幫助將不勝感激。

在此先感謝。

回答

3

在我看來,直接從服務層使用ORM很好。可能沒有什麼理由進一步抽象。將ORM功能看作網關或DAO。如果你真的想,你可以把這些功能放到網關或DAO中,有些可以。

但是,從他的觀點直接使用ORM是錯誤的。不要這樣做。有幾個更好的方法來處理它。

  • 將您需要的數據與其他數據一起返回以從控制器(與模型對話)構建頁面。

  • 從視圖到服務層(Ajaxy)進行遠程調用以獲取數據。

有可能(可能?)其他方式來處理它。但底線是你的觀點不應該與模型層談話。

+0

感謝您的幫助。我將重新修改視圖訪問數據庫的方式。再次感謝 – Sequenzia 2012-01-06 01:44:16

相關問題