2012-06-27 23 views
2

假設我在數據庫中有一個人員表。無論何時將新人添加到數據庫中,都會生成pdf並通過電子郵件發送給某人。業務邏輯屬於MVC模式的地方

這個邏輯是否進入模型,所以所有的應用程序都是通過數據插入新的人,而模型也處理pdf和電子郵件?

或者這個邏輯是否進入控制器?

如果這應該進入模型,並且我正在使用實體框架,那麼我該怎麼做?創建一個包裝.edmx模型的.cs類?

回答

2

這是我的理解,你不想用這種邏輯來控制控制器。屬於控制器的東西將定義將要傳遞給視圖或打開或關閉驗證的模型。還有幾個其他視圖相關的東西,控制器應該控制,但這只是一對夫婦。我試圖做的一般觀點是,控制器負責通過調用服務或模擬存儲庫來填充模型,然後將這些模型傳遞給視圖。

要做你正在解釋的我會添加一個位於數據訪問層之上的服務層(dal - EDMX和存儲庫所在的位置)。在服務層內部,我將調用方法或服務來生成pdf併發送電子郵件。

存儲庫和數據訪問層應該只關心查詢數據庫和檢索記錄。這與您使用的ORM或數據訪問工具無關。將檢索到的記錄傳遞給服務層,您可以在其中對數據執行操作(例如驗證或發送PDF),然後表示層將返回它需要在視圖中顯示它的任何格式的記錄。控制器不會對檢索到的數據執行任何邏輯操作,而只是將其交給視圖。

如果您想了解我所描述的架構佈局的更多詳細信息,那麼我會很樂意爲您提供更多的信息。

+0

感謝您的解釋和幫助。還有一個問題關於邏輯應該去哪裏,答案可能只是服務層,但我想確定。 在控制器中說我想讓一個ID爲10的人傳遞給視圖。 我想從個人表中獲取數據庫中的數據,但我也想從API調用中獲取數據以完成填充模型,比如...今天的人物星座。那去哪了? 謝謝。 – Kyle

+0

@ user1308743這取決於你的API的功能。您有一個存儲庫或一些接受personId = 10的方法,並從人員表中檢索該記錄。該記錄以某種方式傳回給控制器。從那裏你通過視圖模型將該人員記錄傳遞給視圖。然後在視圖中,您的API組件應該請求某種類型的參數,例如檢索到的記錄將提供的「astrological_sign」。該API消失並獲得該星座並顯示它。所以你不會在服務層做到這一點,因爲它不是你的API。 – danmanallen

+0

@ user1308743如果它是您的自定義API,並且您將該星座數據存儲在數據庫中,那麼它應該是隨後的服務調用,它根據人員記錄檢索星座,然後讓該星座數據與該人一起分配視圖模型細節作爲屬性。 – danmanallen