2011-11-01 61 views
0

在服務器端調用方法時,如果某些參數出現問題,我可以得到錯誤或警告列表,如果一切正常,則可以得到正確答案。使用JavaEE設計客戶端 - 服務器錯誤列表

例如,我發送在客戶側到服務器,在那裏我要驗證如果該對象是確定所述邏輯定義的對象,所以可返回與該對象定義的錯誤和警告的列表客戶可以正確糾正它們,或者,如果驗證通過,則說明一切正常。

可能的解決辦法:我可以返回的錯誤列表,這樣,當一切都OK的列表是空的,而當我有一些錯誤或警告我可以處理它們,並將它們顯示給用戶。

這種方法是否正確?有沒有什麼設計模式可以以更好的方式做到這一點?我的背景是客戶端 - 服務器體系結構,我將使用從客戶端調用的EJB使用Business Delegate pattern來設計通信。

回答

1

如果客戶端能夠發送對象到EJB,那麼它可能是用Java編寫的客戶端。所以它實際上是一個調用EJB方法的豐富的表示層。如果是這樣,那麼驗證應該在這個表示層IMO完成。

服務器可能希望爲其自身的安全性添加一個額外的驗證層,但在這種情況下,由於該方法的約定是明確定義的,並且表示層應該驗證對象和方面合同,我只會在發現第一個錯誤時拋出運行時異常。

如果你真的想在服務器端執行驗證,我會使用選中的ValidationException來表示錯誤列表。該例外可以包含消息列表或具有相關參數值的消息鍵列表。這將取決於國際化的必要性(國際化),以及誰負責收集信息。

警告也可以放在此異常中(該消息將與標誌或枚舉關聯)。如果客戶端調用ignoreWarnings = false的方法,則警告將存儲在異常中,並拋出異常。如果它調用ignoreWarnings = true的方法,則忽略警告,只有錯誤導致拋出異常。

+0

你是對的,客戶端是用Java編寫的。驗證幾乎不涉及例如修改已定義的對象以避免名稱重複。所以我沒有在服務器端看到明確的分工,儘管ValidationException是一個好主意。我也喜歡這個警告的提示,謝謝 – maureyes

+0

如果某些驗證規則只能由服務器完成,而不能由表示層完成,那麼對此規則使用ValidationException,或者使用特殊的異常(因爲大部分時間,您可能只有一條規則需要在服務器端進行檢查,否則違規情況將不足以使首先遇到問題的方法可以接受)。 –

+0

是的,看起來合適。如果每次驗證都在服務器端完成,您是否會保持通知警告和錯誤的方式?包含每個錯誤當然是例外。 – maureyes