改進你的資料校驗 -- Value Object Validate 模式 (轉)
Value Validate
嗨!在開發中,你是否常常需要將資料持久化到中,你是否為在持久化之前,校驗大量的將被持久化的資料感到頭疼,是否有一種比較好的方法來進行大量持久化資料的校驗呢?本模式將提供一種比較可行的解決方法。
Data Object Traner 模式在j2ee應用中被廣泛採用,它降低了資料在中傳送的開銷,改善了持久化的瓶頸,但是我們不得不面臨一個問題,大量的資料物件在被持久化前需要嚴格的被校驗,這必然造成大量的校驗程式碼出現,如何消除手工書寫大量的重複的校驗程式碼呢?我採用了Value Object Validator校驗模式。我的解決的方法1:採用反射,比較資料物件和校驗物件的匹配項; 2:匹配相關項; 3:被校驗物件的匹配get方法,獲得值; 4:呼叫校驗物件的匹配validate方法,校驗3所獲得得值。
讓我來用程式碼詳細描述如下:
首先讓我來定義將被校驗的類:
class Customer {
private String name;
private Integer id;
public void setName(String name){
this.name =name;
}
public void setId(Integer id){
this.id =id;
}
public String getName(){
return name;
}
public Integer getId(){
return id;
}
}
接下來來定義校驗類
class ValidateCustomer {
public boolean validateName(String name) {
//這裡模擬校驗
if(name.equals("a")) return true;
return false;
}
public boolean validateId(Integer id) {
//這裡模擬校驗
if(id.equals(new Integer("1"))) return true;
return false;
}
}
我使用一個main來展示如何動態校驗
import .lang.reflect.*;
public class Test{
public static void main(String[] args){
try{
ValidateCustomer validateCustomer= new ValidateCustomer();
Customer customer = new Customer();
//設定資料物件的將被校驗的資料
customer.setId(new Integer("1"));
customer.setName("a");
Method[] methodC = Class.forName("Customer").getMethods();
Method[] methodV = Class.forName("ValidateCustomer").getMethods();
String bname,vname;
Object b ,a;
for(int i=0;i
if(bname.startsWith("get")){
bname =bname.substring(3,bname.length());
for(int j=0;j
if(vname.startsWith("validate")){
vname = vname.substring(8,vname.length());
//注意這裡,確保方法匹配
if(bname.equalsIgnoreCase(vname)){
a = methodC[i].invoke(customer,new Object[]{});
b= methodV[j].invoke(validateCustomer,new Object[]{a});
if(b.toString().equals("false")){
throw new Exception();
}
}
}
}
}
}
System.out.println("ok");
}catch(Exception e){
System.out.println("can not access");
}
}
}
正如你所看到的,我們消除了大量的匹配校驗程式碼,實現了自動匹配,你可進一步改進本模式,實現一個通用校驗類,使的進一步消除匹配程式碼。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1004611/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Vue Element校驗validateVue
- thinkphp validate unique 資料庫欄位唯一性校驗PHP資料庫
- 資料校驗
- MySQL手動資料校驗+雲資料庫資料校驗MySql資料庫
- (entity bean)動態賦值值物件-- Dynamic Create Value Object 模式 (轉)Bean賦值物件Object模式
- easypoi資料校驗
- DW中的資料校驗
- 轉轉業務資料校驗平臺實踐分享
- 動態賦值弱型別值物件--Dynamic Create Value Object 模式 (轉)賦值型別物件Object模式
- pt-table-checksum進行主從資料校驗
- 讓你的 validate 支援場景驗證
- [資料校驗/資料質量] 資料校驗框架(Java):hibernate-validation框架Java
- 行式填報 資料校驗 --- 小計校驗
- 使用validate驗證資料檢查資料壞塊
- ORACLE資料校驗文件Oracle
- 關於value objectObject
- Value Object 和 POJOObjectPOJO
- 奇偶校驗(轉換二進位制、bitset)
- Bumpover.js – 牢固而趁手的資料校驗轉換庫JS
- Bumpover.js - 牢固而趁手的資料校驗轉換庫JS
- 11g rman validate驗證資料庫資料庫
- Binding(四):資料校驗
- struts2資料校驗
- 使用 voluptuous 校驗資料
- 前端資料校驗後,後端介面是否需要再次校驗?前端後端
- jquery.validate手動呼叫校驗,便於ajax請求jQuery
- 前端與後端TP的資料校驗前端後端
- 你的專案管理有持續改進嗎?(轉)專案管理
- JML起步---使用JML 改進你的Java程式(1) (轉)Java
- JML起步---使用JML 改進你的Java程式(3) (轉)Java
- JML起步---使用JML 改進你的Java程式(4) (轉)Java
- JML起步---使用JML 改進你的Java程式(2) (轉)Java
- Hibernate資料校驗簡介
- Spring-Validation(後端資料校驗) 你值得擁有Spring後端
- Java獲取Object中Value的方法JavaObject
- Struts2教程4:使用validate方法驗證資料
- SAP ABAP maintanence view的資料校驗機制AIView
- MerkleTree在資料校驗上的應用