我在董事會做了一個搜索,並且有一些線索與我所要求的相關,但其他問題與我的情況並不完全相同。我應該在哪裏驗證javaee上的數據?
我想實現一個服務(ejbs)和不同的客戶端(其餘的api,webservice,jsf託管的bean和其他一些客戶端)都將使用此服務。我的問題是:在這種情況下,應該在哪裏進行數據驗證?
似乎是合理的我做我的業務控制(EJB)的,裏面 - 因爲我不想要實現一個驗證類型爲每個客戶機,但我沒有看到人們這樣做......
最好的問候, Oliver
我在董事會做了一個搜索,並且有一些線索與我所要求的相關,但其他問題與我的情況並不完全相同。我應該在哪裏驗證javaee上的數據?
我想實現一個服務(ejbs)和不同的客戶端(其餘的api,webservice,jsf託管的bean和其他一些客戶端)都將使用此服務。我的問題是:在這種情況下,應該在哪裏進行數據驗證?
似乎是合理的我做我的業務控制(EJB)的,裏面 - 因爲我不想要實現一個驗證類型爲每個客戶機,但我沒有看到人們這樣做......
最好的問候, Oliver
一般建議是:每個組件,它向外界公開功能應該驗證它接收到的輸入。它不應該希望在所有情況下都能得到有效的投入。此外,正如你所說,它保持在一個地方的驗證。
另一方面,如果雙方都有自己的控制權來決定對客戶進行早期驗證並記錄預期的/所需的有效輸入數據,那麼這可能是一個合理的決定。 您在設計關係數據庫結構時有類似的問題 - 您可以有各種約束來確保有效的輸入數據,或者您可以檢查存儲數據庫中數據的組件中的有效性。 而且,不要忘記,無論何時您在更深層中驗證,所有更高層都必須在驗證失敗時處理異常或錯誤消息。
關於您的具體問題,來自不同客戶的相同服務的使用建議在服務中進行驗證。
感謝您的解釋。訪問javaee7教程我發現了一個很好的解決我的問題的方法:http://docs.oracle.com/javaee/7/tutorial/doc/bean-validation001.htm#GIRCZ 我認爲這是最民主的方式但是爲了避免重複調用服務器,放置客戶端驗證器仍然是件好事。 – Oliver
我認爲在一個地方做到這一點是無效的,不得不復制代碼並將其全部放到您的系統上,這是一種更好的方法。所以在你的業務控制中,你所說的是一個好主意。當事情不正確時,只要拋出異常情況讓客戶接受。 – Omoro