我試圖在我的應用程序中實現驗證策略。我有一個MVC層,服務層,存儲庫和域POCO。現在在MVC層,我在我的視圖模型上使用數據註釋來驗證用戶輸入,從而讓我給用戶快速反饋。在控制器中,在使用automapper設置域對象之前,我調用ModelState.IsValid來檢查輸入。服務層驗證
這是我的麻煩所在。我將我的域對象傳入需要根據業務規則進行驗證的服務,但是如何將驗證錯誤傳遞迴控制器?我找到的示例執行以下操作之一:
- 在服務層中拋出異常並捕獲Contoller。但這似乎是錯誤的,肯定例外情況是例外,我們應該返回一些有意義的東西。
- 使用ModelStateWrapper並將ModelStateDictionary注入到服務中。但是這種方法最終展現爲循環依賴(控制器依賴於服務,服務依賴於控制器),這似乎是一種糟糕的代碼異味。
- 將驗證方法添加到POCO。與此相關的問題是業務規則可能依賴於其他POCO對象,所以必須在可訪問所需表和對象的服務中完成。
有沒有更簡單的方法我缺少?我已經看到很多關於這個問題的問題,但除了上面提到的問題外,沒有具體的解決方案我在考慮在服務中進行驗證的任何方法都可以傳回一些我可以在控制器中使用的鍵/值對象,但我不確定這種策略是否會在稍後出現問題。
您可能會發現以下答案有用:http://stackoverflow.com/a/4851953/29407 –
感謝達林,這看起來很有前途,雖然它確實用於Exception方法。這是通常被接受的方式嗎? – James