[英]Store Business Rules in XML Document, Validate afterwards in Java, how?
XML規則文檔示例:
<user>
<username>
<not-null/>
<capitals value="false"/>
<max-length value="15"/>
</username>
<email>
<not-null/>
<isEmail/>
<max-length value="40"/>
</email>
</user>
我該如何實施? 我從頭開始,目前擁有的是User類,還有一個UserController,它通過基本的Spring MVC(通過Service層和Dao層)將User對象保存在de DB中。 我無法使用Spring MVC驗證,但是在我們的模型類中,我必須使用XML文檔,以便管理員可以更改規則
我認為我需要一種模式,該模式可以根據XML規則文檔提供的內容動態構建算法,但是除了大量的if語句外,我似乎什么也沒想到。
我也沒有解析的東西,而且我不確定如何將其與驗證過程的實際實現(解耦)在一起。
這個輪子已經被重塑了很多次!
您可能可以通過實現Spring的Validator接口來使用Spring MVC驗證,但是您可能需要實現或找到一種將驗證基於其他方式加載的規則的方法。
我在Google上搜索並找到了許多頁面,這些頁面描述了如何在Spring中使用Commons驗證。 作為獎勵,有些人描述使用valang。 如果您的管理員可以在部署之前編輯驗證規則,則其中之一可能就足夠了。
如果您確實想制定自己的XML業務規則,則可能需要使用Apache Digester解析規則。 您可能希望將規則加載到您自己的Spring Validator接口實現所使用的數據結構中。
如果在部署后必須更改規則,則當然需要添加一種機制來刷新規則。 但是至少Digester可能仍會在那里提供幫助。
也許一個例子是:
//PSEUDOCODE
abstract class Validator {
Map<String method, Set<Field> fields> validationMap;
Map<String fieldName, Set<String> errorMessages> validationErrors;
void parseXML() {
validationMap.add("notNull", { " 'username', 'JavaPete' ", " 'email', 'pete@java.com' " }
validationMap.add("max-length", { " 'username', 'JavaPete', '15' ", ... }
}
void validate() {
for (String method : validationMap.keys) {
for (Field field : validationMap.get(method) ) {
invoke(method, field);
}
}
}
void notNull(Field field) {
if (field.getValue() == "") {
validationErrors.add(field.getFieldName(), "Can't be null!");
}
}
請注意,我沒有在Maps中正確添加每個Set <>屬性,但這只是在這里提出了一點。
這將是一個有效的解決方案嗎? 強大的?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.