版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
3.4平臺通用配置深圳市信息職業(yè)技術(shù)學(xué)院——驗證規(guī)則配置實現(xiàn)目
錄驗證規(guī)則開發(fā)實現(xiàn)示例01框架驗證規(guī)則實現(xiàn)邏輯介紹02框架驗證規(guī)則實現(xiàn)03經(jīng)驗總結(jié)04知識回顧根據(jù)需求進行主從表功能UML建模;主從表功能的開發(fā)實現(xiàn)步驟;初始菜單配置;運行項目生成數(shù)據(jù)庫表、序列、更新元數(shù)據(jù)和配置菜單;能夠獨立進行主從表功能的問題修復(fù);能夠?qū)δ苓M行擴展,完成一主多從、主從孫關(guān)系的功能開發(fā)實現(xiàn)學(xué)習(xí)目標(biāo)通過本節(jié)學(xué)習(xí)可以:掌握框架驗證規(guī)則包括哪幾種實現(xiàn)方式,不同的實現(xiàn)方式有什么差異?掌握不同驗證規(guī)則的開發(fā)實現(xiàn)步驟;能夠修復(fù)驗證規(guī)則開發(fā)過程中的bug。01驗證規(guī)則開發(fā)實現(xiàn)示例思考題通過前面課程的學(xué)習(xí),我們知道框架驗證可以在哪里進行配置實現(xiàn)?可以在實體屬性中標(biāo)記規(guī)則特性,然后進行實體元數(shù)據(jù)的更新。業(yè)務(wù)描述業(yè)務(wù)描述讀者分類增加驗證:
讀者分類被讀者管理引用后,不允許刪除讀者管理增加驗證:1、讀者編號、姓名聯(lián)合驗證唯一2、手機號驗證輸入格式3、已借書數(shù)量不能大于讀者分類中維護的可借書數(shù)量開發(fā)實現(xiàn)-讀者分類被讀者管理引用后不允許刪除實現(xiàn)邏輯:可以用框架的規(guī)則去實現(xiàn),引用后不允許刪除使用框架的引用規(guī)則,需要自己在服務(wù)端建一個規(guī)則類,以Rule進行結(jié)尾,繼承NoReferencedRule進行實現(xiàn),如下圖實現(xiàn):開發(fā)實現(xiàn)開發(fā)實現(xiàn)-讀者管理中讀者編號、姓名聯(lián)合驗證唯一實現(xiàn)邏輯:該驗證的實現(xiàn)可以使用非重復(fù)驗證來實現(xiàn),這里以規(guī)則類的方式開發(fā)實現(xiàn):開發(fā)實現(xiàn)開發(fā)實現(xiàn)-讀者管理中手機號輸入格式驗證實現(xiàn)邏輯:該驗證的實現(xiàn)可以使用實體規(guī)則進行驗證,也是需要建一個規(guī)則類進行實現(xiàn):開發(fā)實現(xiàn)開發(fā)實現(xiàn)-已借書數(shù)量不能大于讀者分類中維護的可借書數(shù)量實現(xiàn)邏輯:該驗證的實現(xiàn)也可以通過實體規(guī)則進行驗證。開發(fā)實現(xiàn)注意:以上所有的規(guī)則實現(xiàn)都要進行實體元數(shù)據(jù)的更新才會生效,修改了對應(yīng)的規(guī)則需要重新進行實體元數(shù)據(jù)的更新。思考題前面示例驗證規(guī)則的實現(xiàn)中,繼承的父類包括哪些?02框架驗證規(guī)則實現(xiàn)邏輯介紹框架驗證規(guī)則實現(xiàn)邏輯介紹通過前面單表、主從表的開發(fā)和剛剛的驗證規(guī)則示例中可以看出,我們的規(guī)則可以在實體屬性中標(biāo)記特性進行實現(xiàn),也可以在服務(wù)端定義規(guī)則類進行實現(xiàn),之間有什么差異呢?從實現(xiàn)可以看出,在實體中標(biāo)記的特性只能是對該屬性的簡單驗證;對于復(fù)雜驗證或者是屬性之間的聯(lián)合驗證無法在實體中標(biāo)記特性,就需要引入規(guī)則類進行實現(xiàn)。兩者的相同點就是:實現(xiàn)完成后都需要進行實體元數(shù)據(jù)的更新才會生效。框架驗證規(guī)則實現(xiàn)邏輯框架驗證規(guī)則實現(xiàn)邏輯介紹框架驗證規(guī)則邏輯的實現(xiàn):框架針對單個屬性的簡單驗證是在實體屬性中標(biāo)記特性進行實現(xiàn)的(這些也可以在驗證方法中進行實現(xiàn)),框架在生成表格或者表單的時候,將屬性的這些特性和屬性對應(yīng)Ext控件一起生成返回到前端,然后前端解析將可以轉(zhuǎn)換為Ext控件的驗證規(guī)則轉(zhuǎn)換為控件規(guī)則,在操作控件時,在對應(yīng)控件中有紅色框框顯示(這種是做了前后端雙重驗證);不能轉(zhuǎn)換的,保存數(shù)據(jù)時給出具體的異常提示(只做了后臺驗證)。對于復(fù)雜的驗證,如規(guī)則類中實現(xiàn)的規(guī)則,是無法解析為對應(yīng)控件的驗證,則是在后臺進行數(shù)據(jù)的驗證處理,即通過RF.Save()保存數(shù)據(jù)前,去調(diào)用實體對應(yīng)的驗證,驗證不通過給出具體的異常提示(走的后臺驗證)??蚣茯炞C規(guī)則實現(xiàn)邏輯03框架驗證規(guī)則的實現(xiàn)思考題框架驗證規(guī)則的實現(xiàn)方式包括幾種?分別是?框架驗證規(guī)則實現(xiàn)方式框架通用的驗證方式,框架提供了三種實現(xiàn)方式,分別為運行時規(guī)則、標(biāo)準(zhǔn)規(guī)則和預(yù)編譯規(guī)則。1、運行時規(guī)則:1)通過在實體元數(shù)據(jù)模塊進行運行時配置的規(guī)則,如字段長度、非空等驗證。如果是部署的服務(wù),添加或者修改了配置規(guī)則,需要重啟服務(wù)。2)在實體屬性中標(biāo)記特性,只能標(biāo)記非空,非重復(fù),最大長度,最小長度,最大值和最小值,標(biāo)記的特性是針對單個屬性的驗證,標(biāo)記完成后需要對實體元數(shù)據(jù)進行更新操作,驗證才會生效。說明:該種方式實現(xiàn)的規(guī)則如果在實體元數(shù)據(jù)規(guī)則類中把對應(yīng)規(guī)則禁用了,即使在代碼中標(biāo)記了對應(yīng)的規(guī)則,也不會生效;規(guī)則刪除后,實體元數(shù)據(jù)的規(guī)則不能自動刪除,需要手動把對應(yīng)的規(guī)則刪除或者是禁用。驗證規(guī)則的實現(xiàn)方式框架驗證規(guī)則實現(xiàn)方式2、標(biāo)準(zhǔn)規(guī)則:在實體配置中重寫AddValidations()方法實現(xiàn)規(guī)則驗證,編寫代碼運行項目后立即生效,不可配置。3、預(yù)編譯規(guī)則:通過C#代碼的方式實現(xiàn)驗證規(guī)則,然后在實體元數(shù)據(jù)功能進行更新并配置啟用。包含的規(guī)則父類:實體規(guī)則(繼承EntityRule<T>)、非重復(fù)規(guī)則(繼承NotDuplicateRule<T>)、刪除被引用規(guī)則(繼承NoReferencedRule<T>)說明:預(yù)編譯規(guī)則也需要在實體元數(shù)據(jù)中進行更新才會生效,如果規(guī)則的類名修改了,原來類名生成的規(guī)則不會自動刪除,會根據(jù)新的類名重新生成一條規(guī)則。驗證規(guī)則的實現(xiàn)方式運行時規(guī)則實現(xiàn)1、在“實體元數(shù)據(jù)(數(shù)據(jù)字典)”菜單的“實體規(guī)則”頁簽中,維護規(guī)則,做基礎(chǔ)的驗證。運行時規(guī)則實現(xiàn)說明:在項目開發(fā)階段不建議在該界面直接維護規(guī)則。運行時規(guī)則實現(xiàn)2、在實體屬性中配置驗證規(guī)則,包含的驗證:
非空驗證:[Required]
非重復(fù)驗證:[NotDuplicate]
最大長度驗證:[MaxLength(40)]
最小長度驗證:[MinLength(2)]
最大值驗證:[MaxValue(9999)]
最小值驗證:[MinValue(1)]
示例:運行時規(guī)則驗證示例,如讀者分類中類別號的驗證:運行時規(guī)則實現(xiàn)運行時規(guī)則實現(xiàn)注意事項:1、驗證要生效,必須進行實體元數(shù)據(jù)的更新,且規(guī)則狀態(tài)是啟用狀態(tài)才會生效;2、實體屬性配置的規(guī)則刪除,元數(shù)據(jù)生成的規(guī)則不會自動刪除,需要手動刪除或者禁用,否則規(guī)則還會生效;3、引用屬性的非空驗證是通過屬性的類型進行驗證的,不要在引用屬性中標(biāo)記非空特性[Required],否則非空驗證的提示會提示兩次。運行時規(guī)則實現(xiàn)標(biāo)準(zhǔn)規(guī)則實現(xiàn)標(biāo)準(zhǔn)規(guī)則是在實體配置中重寫添加驗證方法AddValidations進行實現(xiàn):標(biāo)準(zhǔn)規(guī)則實現(xiàn)1、標(biāo)準(zhǔn)規(guī)則中可以實現(xiàn)運行時規(guī)則和預(yù)編譯規(guī)則中實現(xiàn)的所有規(guī)則(雖然可以實現(xiàn),但是被引用刪除規(guī)則建議還是使用預(yù)編譯中刪除被引用的規(guī)則實現(xiàn),減少開發(fā)的代碼量);2、標(biāo)準(zhǔn)規(guī)則與運行時和預(yù)編譯規(guī)則的差異:標(biāo)準(zhǔn)規(guī)則不可配置,運行時和預(yù)編譯規(guī)則可配置。標(biāo)準(zhǔn)規(guī)則實現(xiàn)標(biāo)準(zhǔn)規(guī)則中可以實現(xiàn)的驗證:1、非空驗證;rules.AddRule(屬性名,newRequiredRule());2、非重復(fù)驗證,單個和多個屬性的非重復(fù)驗證;
單個屬性非重復(fù)驗證:rules.AddRule(屬性名,newNotDuplicateRule());
多個屬性非重復(fù)驗證
rules.AddRule(newNotDuplicateRule()
{Properties=
{
屬性名1,
屬性名2
},MessageBuilder=(e)=>
{return“驗證不通過的提示信息".L10N();
}
});標(biāo)準(zhǔn)規(guī)則實現(xiàn)標(biāo)準(zhǔn)規(guī)則實現(xiàn)3、長度驗證,包括最小和最大長度的設(shè)置;
rules.AddRule(屬性名,newStringLengthRangeRule(){Min=2,Max=40});4、最大最小值驗證;rules.AddRule(屬性名,newNumberRangeRule(){Min=1,Max=100});5、正則表達式驗證;
rules.AddRule(屬性名,newRegexMatchRule(){Regex=newRegex(@"^((\d{3}-\d{8}|\d{4}-\d{7,8})|(0?(13|14|15|17|18|19)[0-9]{9}))$"),MessageBuilder=(o)=>{ return"電話號碼不正確";}});標(biāo)準(zhǔn)規(guī)則實現(xiàn)標(biāo)準(zhǔn)規(guī)則實現(xiàn)6、實體驗證
rules.AddRule(newHandlerRule(){Handler=(o,e)=>{
//這里可以進行查數(shù)據(jù)庫進行操作,當(dāng)前實體的數(shù)據(jù)不能滿足驗證判斷要求時可查數(shù)據(jù)庫判斷varreader=o.CastTo<實體類>();if(判斷的條件)
e.BrokenDescription=“具體的驗證提示信息".L10nFormat(reader.Name);}});標(biāo)準(zhǔn)規(guī)則實現(xiàn)標(biāo)準(zhǔn)規(guī)則實現(xiàn)示例讀者管理中通過標(biāo)準(zhǔn)規(guī)則驗證實現(xiàn)如下驗證:讀者編號非空,姓名非空,單位非空讀者編號,姓名聯(lián)合驗證唯一讀者編號和姓名最大可輸入長度為20手機號需要驗證格式已借書數(shù)量不能大于可借書數(shù)量標(biāo)準(zhǔn)規(guī)則實現(xiàn)示例預(yù)編譯規(guī)則實現(xiàn)預(yù)編譯規(guī)則也是需要對實體元數(shù)據(jù)進行更新,編寫的規(guī)則才會生效;1、非重復(fù)規(guī)則:繼承NotDuplicateRule<T>,在構(gòu)造函數(shù)中實現(xiàn)非重復(fù)邏輯預(yù)編譯規(guī)則實現(xiàn)[System.ComponentModel.DisplayName(“規(guī)則名稱信息")][System.ComponentModel.Description(“規(guī)則描述信息")]
public
class
XXXRule:NotDuplicateRule<T>
{
public
XXXRule()
{Scope=EntityStatusScopes.Update|EntityStatusScopes.Add;Properties.Add(屬性1);Properties.Add(屬性2);MessageBuilder=(e)=>
{
vart=easT;//e為對應(yīng)的實體
return
“驗證不通過的提示信息[{0}]”.L10nFormat(t.A);//{0}為參數(shù)設(shè)置
};
}
}規(guī)則作用域,用Scope進行設(shè)置,默認(rèn)為Add和Update。非重復(fù)驗證的屬性,只能設(shè)置數(shù)據(jù)庫存在的字段屬性,且不能是復(fù)雜屬性提示信息,可不設(shè)置,非重復(fù)框架有默認(rèn)的提示。預(yù)編譯規(guī)則實現(xiàn)2、被引用不允許刪除:繼承NoReferencedRule<T>,在構(gòu)造函數(shù)中實現(xiàn)被引用不能刪除的邏輯。預(yù)編譯規(guī)則實現(xiàn)[System.ComponentModel.DisplayName(“規(guī)則名稱信息")][System.ComponentModel.Description(“規(guī)則描述信息")]
public
class
XXXRule:NoReferencedRule<T>
{
public
XXXRule()
{Scope=EntityStatusScopes.Delete;Properties.Add(被引用的屬性名);MessageBuilder=(e,c)=>
{
varcat=easT;
return
“被引用刪除的提示信息{0}”.L10nFormat(c);
};
}
}規(guī)則作用域,用Scope進行設(shè)置,默認(rèn)為刪除,通常不用設(shè)置。只能是引用Id屬性,通過其他實體.引用Id屬性名加載出來。驗證不通過的提示信息,引用不允許刪除框架有默認(rèn)提示信息,如果想修改框架的提示信息可通過此屬性添加,其中e為實體,c為被引用的次數(shù)。預(yù)編譯規(guī)則實現(xiàn)3、實體規(guī)則:繼承EntityRule<T>,在這個規(guī)則中可以實現(xiàn)所有規(guī)則。預(yù)編譯規(guī)則實現(xiàn)[System.ComponentModel.DisplayName("規(guī)則名稱信息")][System.ComponentModel.Description("規(guī)則描述信息")]
public
class
XXXRule:EntityRule<T>
{
public
XXXRule()//構(gòu)造函數(shù)
{Scope=EntityStatusScopes.Add|EntityStatusScopes.Update;//規(guī)則作用域默認(rèn)為新增和修改,如果是只在添加操作生效,可以對該屬性進行規(guī)則設(shè)置ConnectToDataSource=false;
}
protected
override
voidValidate(IEntityentity,RuleArgse)//驗證方法
{ //這里可以調(diào)用控制器方法對數(shù)據(jù)庫進行操作
vart=entityasT;//entity為當(dāng)前驗證的實體
if(驗證的條件)e.BrokenDescription=“驗證不通過的提示信息{0}".L10nFormat(t.A);
}
}是否連接數(shù)據(jù)倉庫,默認(rèn)為false,如果在驗證方法中有對數(shù)據(jù)庫進行操作,該屬性要設(shè)置為true。思考題標(biāo)準(zhǔn)規(guī)則的實體驗證和預(yù)編譯規(guī)則的標(biāo)準(zhǔn)規(guī)則,都能實現(xiàn)所有的驗證,有什么區(qū)別?04經(jīng)驗總結(jié)經(jīng)驗總結(jié)標(biāo)準(zhǔn)驗證AddValidations和預(yù)編譯驗證(在服務(wù)端編寫驗證規(guī)則類)是兩種不一樣的實現(xiàn)方式,同一邏輯用兩種方式驗證的效果是一樣的,只是其中一種是代碼所見即所得,一種是可配置;在項目上對應(yīng)的驗證邏輯,根據(jù)實際需要選擇其中一種方式實現(xiàn)即可;非重復(fù)驗證盡量使用框架非重復(fù)的子類進行驗證,不要在實體規(guī)則中進行驗證,原因是寫的邏輯比較多
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025江西省安全員-C證考試(專職安全員)題庫及答案
- 2025陜西省建筑安全員《B證》考試題庫及答案
- 2025浙江省安全員A證考試題庫附答案
- 二十四節(jié)氣之立春課件模板
- 《蛋糕制作》課件
- 工藝管道培訓(xùn)課件
- 《海南??谙母偂氛n件
- 單位管理制度收錄大合集【人員管理篇】
- 有機玻璃操作箱行業(yè)行業(yè)發(fā)展趨勢及投資戰(zhàn)略研究分析報告
- 2025年節(jié)油設(shè)備項目評估報告
- 2025屆高考語文復(fù)習(xí):信息類文本五大類型的主觀題 課件
- 中鐵開投、中鐵云投招聘筆試沖刺題2025
- 陜西省西安市高新一中2024-2025學(xué)年九年級上學(xué)期綜合素養(yǎng)評價(三)化學(xué)試卷(含答案)
- 2024版健康醫(yī)療服務(wù)機構(gòu)合作協(xié)議范本3篇
- 公務(wù)車輛定點加油服務(wù)投標(biāo)文件(技術(shù)方案)
- 《中國制造業(yè)的崛起》課件
- 中小學(xué)學(xué)校安全管理制度匯編
- 重慶市2023-2024學(xué)年七年級上學(xué)期期末考試數(shù)學(xué)試題(含答案)
- (正式版)HGT 20656-2024 化工供暖通風(fēng)與空氣調(diào)節(jié)詳細設(shè)計內(nèi)容和深度規(guī)定
- 安徽省合肥市蜀山區(qū)2023-2024學(xué)年五年級上學(xué)期期末質(zhì)量檢測科學(xué)試題
- 護士年終總結(jié)個人個人
評論
0/150
提交評論