我正在開發一個向Web服務發送RequestDTO的類。我需要在發送之前驗證請求。如何降低圈複雜度?
該請求可以從3個不同的地方發送,並且對於每個「請求類型」有不同的驗證規則,例如, request1必須有名稱和PhoneNumber,請求2必須有地址等)
我有一個DTO包含的字段(名稱,地址,城市,PHONENUMBER等一長串),它是同DTO發送不管它是哪種類型的請求。
我創建了3種不同的驗證方法,並根據類型調用適當的方法。
在每個這些方法中,我都有一個很長的if-else列表來檢查每個請求類型所需的字段。
private void validateRequest1(Request request) {
StringBuilder sb = new StringBuilder();
if (null == request) {
throw new IllegalArgumentException("Request is null");
}
if (isFieldEmpty(request.getName())) { *see below
sb.append("name,"));
}
if (isFieldEmpty(request.getStreet())) {
sb.append("street,"));
}
...
isFieldEmpty()
檢查字符串空和isEmpty()
並返回boolean
這給我的28這些方法之一圈複雜,所以我的問題是..是有可能降低這種複雜性? - 如果是這樣,我會怎麼做呢?
最後,我需要檢查很多領域,我看不出這可以在沒有大量的檢查來完成:/
我的想法是:使用某種封裝空白(或其他)檢查以及要採取的動作('sb.append()')等的'FieldChecker'對象,並遍歷這樣的對象。這使得代碼更清晰,因爲您必須明確定義該檢查的輸出和輸入。 – millimoose 2013-05-07 11:41:51