[英]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 Controller或BLL throw
或傳遞exception
。
處理動作而不是建模是控制器的工作
顯示消息框(或其他)而不是模型是視圖的工作
你不能在模型中處理exception
,實際上......你只能記錄或拋出它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.