簡體   English   中英

模型或控制器中的錯誤處理?

[英]Error handling in the model, or in the controller?

我在各種 IRC 頻道上四處詢問,但無法得到帶有明確解釋的答案。 錯誤(與模型有關,例如事務失敗)應該在模型中還是在控制器中處理?

在此先感謝您的幫助。

編輯

好吧,令人困惑的是我的代碼(在模型中)已經看起來像這樣:

try
{
    // Connect to MongoDB
    // Fetch a record
}
catch (MongoConnectionException $e)
{
    // Handle this error
}
catch (MongoException $e)
{
    // Handle this error
}

那么,我應該根據 MongoDB 返回的異常返回異常嗎? 或者我應該直接允許這些異常冒泡到控制器嗎?

謝謝!

正確答案是“兩者”,但主要是在模型中。

您的控制器應該做的適當的事情是簡單地捕獲模型拋出的一些異常,並處理輸出一個很好的“whups”消息。 根據您構建模型的方式,控制器可能適合做一些日志記錄。

除了捕獲異常,可能寫入日志(如果您的模型基礎結構沒有這樣做)並顯示一個非常錯誤之外,其他任何事情都不屬於您的控制器。

諸如事務失敗之類的錯誤 - 以及在這種情況下該怎么做 - 是業務邏輯問題。 因此,它們應該在模型中處理,並將適當的通知傳遞回控制器。

胖模型,瘦控制器。

ASP.NET C# 的 Scott Guthrie 建議使用 Controller 作為異常處理程序。 他還建議為項目設置幫助對象和處理程序。 這反過來又使您可以像往常一樣繼續您的開發。

請注意,但是 PHP MVC 仍處於其最早的階段和實現,因此,這可能並不完美。

我確實認為,一旦您決定如何處理您仍然使用的解決方案,並在做出決定后遵循該模式。

MVC 框架背后的思想非常簡單且極其靈活。 這個想法是你有一個單一的控制器(比如 index.php),它根據請求中的參數控制框架內應用程序的啟動。 這通常至少包括一個定義要調用哪個模型的參數、一個事件和常用的 GET 參數。 控制器從那里驗證請求(身份驗證、有效模型、請求清理等)並運行請求的事件。

目前只有兩個真正的框架……這可能是編碼、支持和未來版本的問題。 但是,有很多框架可以擴展自身以支持 MVC。

通過早期階段,我的意思是說並建議當前的框架、解決方案和支持由於匆忙交付和糟糕的文檔而受到限制。 此外,我建議什么對我有用並且過去對我有用。

我強烈要求這個網站

在大多數情況下,您應該向調用方/接收方 AKA ControllerBLL throw或傳遞exception

處理動作而不是建模是控制器的工作
顯示消息框(或其他)而不是模型是視圖的工作

不能在模型中處理exception ,實際上......你只能記錄或拋出它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM