基本驗證與業務驗證,基本驗證就是始終保持不變的驗證規則,可以通過如下硬編碼實現:
publicclass
order
[required]
[stringlength(
30)]
public
string customer
[required(allowemptystrings=true
)] [stringlength(
50)]
public
string storeid
}
然後在用如下**validate, 把錯誤放到list中:
privatebool
validatebasicrule(order order)
return
true
; }
public
static
class
dataannotationhelper}}
return
errors;
}private
static
icustomtypedescriptor gettypedescriptor(type type)
}
然後說說業務規則的易變
saas程式,或者業務規則極其易變時,就要採用其他方法來做了,不可能每個公司都用設計模式分開寫(雖然也行,但是不方便,公司業務規則多了後,對這些規則**的管理就是很高的成本,而且要developer來負責)。所以要用規則檔案來分開規則的編寫,好處:
把修改的職責交給別人,比如專案經理、專案實施人員
**不需要重新編譯就能實現業務規則的修改
我們來解決下這個易變問題,假設有2公司:a和b。
a公司驗證規則:
基本驗證(就是order類的驗證規則的硬編碼)
b公司驗證規則:
基本驗證(同上)
自定義驗證規則:無
如果用a2d規則引擎來解決的話,需要怎麼做呢?
第一步當然是編寫規則檔案,a公司的規則檔案:
declareallowstores=["www.cnblogs.com", "www.cnblogs1.com", "www.cnblogs2.com"]
end declare
rule "test"
when
!_.contains(allowstores, entity.storeid)
then
errors.add("storeid", "storeid value not right")
end rule
由於b公司沒有自定義規則,因此不需要編寫相應的規則檔案
第二步,調整驗證邏輯,如下:
publicclass
orderservice : brokenrulesholder
private
bool
validatecompanyrule(order order)
if (tempbrokenrulesholder.brokenrules.count > 0
)
return
true
; }
private
bool
validatebasicrule(order order)
return
true
; }
}
brokenrule.cs**:
publicclass
brokenrulesholder
}public
void add(string key, string
msg)
public
void addrange(liststring, string>>rules)
public
void
clearbrokenrules()
}
demo**已經更新到a2d框架中了,這裡就不upload執行圖了。
a2d規則引擎已經內嵌了underscore
1.5.2,因此規則定義檔案(.r檔案)中可以寫相應的underscore函式來簡化寫法。
規則檔案說明:
declareallowstores1=["www.cnblogs.com", "www.cnblogs1.com", "www.cnblogs2.com"]
allowstores2=["www.cnblogs.com", "www.cnblogs1.com", "www.cnblogs2.com"]
end declare
rule "rule 1"
when
!allowstores1.contains(entity.storeid)
then
errors.add("storeid", "storeid value not right")
end rule
rule "rule 2"
when
!allowstores2.contains(entity.storeid)
then
errors.add("storeid", "storeid value not right")
end rule
declare section:
可以不寫,但是最多只能存在1個這樣的section
每行可以有逗號,也可以沒有逗號
這個section的本意是:當前規則檔案的變數全域性定義、初始化工作
開頭為declare,小寫
結尾為end declare,小寫
rule section:
必須存在1到多個
每行可以有逗號,也可以沒有逗號
開頭為rule "一些描述",小寫
結尾為end rule,小寫
如果存在3個rule時,最終會變成這樣的js邏輯
載入underscore的js**載入declare section的js**
if(rule1 conditions)
else
if(rule2 conditions)
else
if(rule3 conditions)
Kettle8 2實現抽取檔案到Hive
三 案例演示 四 總結 說明 說明 本案例使用hive本地模式,讀者自行安裝mysql 該案例使用mysql5.7,讀者自行選擇 安裝步驟 在hdfs建立目錄,執行如下命令 hdfs dfs mkdir p user pdi weblogs parse 上傳weblogs parse.txt到 us...
PHP檔案上傳基本驗證
html部分 lang en charset utf 8 檔案上傳title head action doupload.php method post enctype multipart form data type file name myfile type hidden name max fil...
C標頭檔案編寫基本規則
1.注釋,版權,作者,重大修訂記錄等資訊 2.防重入開關,也就是常見的 ifndef h 必須確保header guard巨集名永不重名 define h 標頭檔案內容 endif 3.c 編譯器自適應開關,也就是常見的 h檔案頭部 ifdef cplusplus extern c endif 4....