我有以下要求: 我有一個驗證系統。我需要做的事情之一是對XML文件進行驗證,即驗證該標籤X是否等於給定值。我有多種可能的情況,每種情況下都有一組需要驗證的不同標籤。java驗證設計問題
我不想在不同場景下測試相同標籤時重複相同的代碼。
我想弄清楚會解決這個問題的設計。
任何想法?
謝謝。
我有以下要求: 我有一個驗證系統。我需要做的事情之一是對XML文件進行驗證,即驗證該標籤X是否等於給定值。我有多種可能的情況,每種情況下都有一組需要驗證的不同標籤。java驗證設計問題
我不想在不同場景下測試相同標籤時重複相同的代碼。
我想弄清楚會解決這個問題的設計。
任何想法?
謝謝。
我會爲這些場景定義XPath表達式對和預期結果。
驗證器然後將採取一個場景(對象),編譯並將關聯的表達式應用到xml文檔。這將選擇一個元素,驗證器會檢查元素的內容是否與期望值匹配。
呃,委託給共享方法?像:
void validateAppleScenario(Xml xml) {
validateFruit(xml);
// validate apples specific tags
}
void validateBanana(Xml xml) {
validateFruit(xml);
// validate banana specific tags
}
void validateFruit(Xml xml) {
// validate tags common to all fruit
}
或者如果你喜歡驗證是單獨的對象,你可以使用子類型:
interface Validator {
void validate(Xml xml);
}
class FruitValidator implements Validator {
void validate(Xml xml) {
// validate tags common to all fruit
}
}
class AppleValidator extends FruitValidator {
void validate(Xml xml) {
super.validate(xml);
// validate tags specific to apples
}
}
一種方法是將XML解析成一個對象,然後按照豆驗證它驗證規範(JSR 303)。 Hibernate Validator是參考實現。*您可以使用驗證約束對您的屬性進行註釋,然後指定validation groups,以便在某些情況下驗證某些字段。
* Hibernate Validator與Hibernate ORM不同。它們只與Hibernate ORM使用Validator進行約束檢查有關。
感謝您的回答。預期的結果在運行時確定。所以我不能預定義表達式和結果。 – dan 2011-05-16 21:08:50
@dan - 無所謂 - 然後只存儲XPath並在運行時告訴驗證程序*其中*用於獲取預期結果或規則 – 2011-05-16 21:52:40