|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
它有很多缺点的,有兴趣可以到网上去搜索一下。于是微软有发明了“下一代”C++:C++/CLI语言,这个可以解决在.NETFramework中,托管C++产生的问题。在《程序员》杂志上,lippman和李建中合作连载介绍了C++/CLI语言。asp.net 德国足协劝诫那些大概前去德国寓目2006年天下杯赛的球迷要防备伪钞,不要从非代办署理商和票估客手中购票。天下杯门票都是高科技产物,门票被植进微芯片,只要经由过程正当路子获得门票的球迷才干进场。伪钞征象在近年的足球年夜赛上众多成灾,德国足协但愿能经由过程宣扬制止天下杯球迷成为其受益者。
■验明正身-数占有效性
天下杯万人注目但门票无限,以是有天然假有人买假,安联球场的年夜门前站几位检票员必不成少,而我们的程序偶然也一样。当你接到一个积累数年的数据表时,发明单单接洽德律风都有23种格局时,你是不是也叹息到,在用户提交数据时体系也必要靠检票员来考证一下?但是我们仍是发明象数据考证如许的内容常常简单被人无视,很多体系常让拿着公车票的家伙混进球场撒泼,各类数据好像发情野马一样平常势如破竹,先不说平安成绩,从数占有效性的角度看,几年后它会象霉菌一样让全部数据库糜烂蜕变,渣滓成堆。不外常会有另外一种声响在耳旁响起:"弄那末庞大做甚么呀,这个体系、乃至是这个企业没等霉菌入手下手起感化,它就挂了!"
使用程序必需确保体系的数占有效性有二层寄义:一是格局考证,要确保数据属于体系计划时界说的范例、局限,乃至是行业的特定格局,这一般在体系的UI层来完成考证;二是逻辑考证,数据间常常切合特定的营业逻辑划定规矩,数据操纵不克不及损坏其间逻辑干系而形成体系非常,这一般在体系的底层来完成考证。本文次要会商前者的完成。
不外很多体系为了坚持数占有效性经常过犹不及,界面充溢着具有庞大输出格局限定的文本输出框,请求用户消费大批工夫来举行自我数据校订,填写个表单比高考画框框还要让人费力,企业用户还好办些,最多抗议两声也就承受,互联网用户可不吃这一套,来点创意!
■检票的老太太们-考证器架构
WEB使用程序是基于表单来输出数据。为了确保数占有效性,我们必需在服务端对输出数据举行查验,但思索到用户感觉,常常又在客户端拔出些javascript剧本。客户端考证就像我们呼吸氛围时的鼻子,先把颗粒物杂质等反对在表面,从而年夜年夜加重了肺的包袱;服务器端考证是构建平安Web使用程序必须的,只要服务器端考证才能够供应真正使用程序级的平安。两重校验,噜苏无聊,怪不得没几人喜好。
.NET起首将考证器与考证工具分别成两个部分,考证工具表露考证属性,检票员们分头监视考证工具,完成数据校验,对照庞大的校验可让几位检票员一同守着;每一个页面必要一名领头,让她拿出名单,顺次敦促页面内每一个考证器对所辖输出域举行考证,汇总出了局;最初页面必要某些控件可以主动触发考证,这个脚色一般是由带有回发功效的Button类控件来饰演,如3-1所示。
介入Web窗体考证的服务器控件必需完成IValidator接口,这是检票员们的配合特性。用Volidate办法完成校验历程,得出一个了局值IsValid属性,包括回绝放行的来由ErrorMessage属性。因而有以下界说:
publicinterfaceIValidator{
stringErrorMessage{set;get;}
boolIsValid{set;get;}
voidVolidate{};
}
作为校验举动的原子触发单元,页面类设置了一些需要的成员:Page.Validators汇合是页面的考证器容器,Page.Validate办法将顺次挪用容器中每一个考证器的Validate办法更新各自的IsValid属性,Page.Valid属性用于汇总页面的校验了局,它就是页面的心灵之锁。
CausesValidation属性是引发回发控件的大众属性,为真时控件在Click事务处置之前主动挪用Page.Validate办法,如许使得我们在年夜多时分不必要显式地往挪用Page.Validate办法便可完成校验历程。
■圭臬标准-BaseValidator类及客户端考证
只管在ASP.NET中,任何经由过程完成IValidate接口的类都能够被以为是考证器,但在实践使用中,我们一般把考证器计划成服务器控件。
BaseValidator是派生自Label类的笼统基类,除完成IValidator接口,次要实行校验必须的各类通用义务,包含从被考证工具提取值、界说校验笼统办法、发生客户端考证剧本、完成在Page.Validators汇合中注册等等。经由过程承继它,我们只需会合精神往完成服务器端和客户真个考证逻辑就能够完成自界说考证器。下例为一反省CheckBoxList是不是有勾选1个以上的自界说考证器典范。
usingSystem;
usingSystem.Collections;
usingSystem.Text;
usingSystem.Web;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.ComponentModel;
namespaceessay.Controls{
//派生于BaseValidator基类的自界说考证器
publicclassRequiredCheckBoxListValidator:BaseValidator{
privateListControlm_ListCtl;
//启用客户端考证
publicRequiredCheckBoxListValidator(){
base.EnableClientScript=true;
}
//断定由ControlToValidate指定的被考证控件是不是无效
protectedoverrideboolControlPropertiesValid(){
ControlwebControl=this.FindControl(ControlToValidate);
if(webControl!=null){
m_ListCtl=(ListControl)webControl;
returntrue;
}
else
returnfalse;
}
//界说校验划定规矩
protectedoverrideboolEvaluateIsValid(){
return(m_ListCtl.SelectedIndex!=-1);
}
protectedoverridevoidOnPreRender(EventArgse){
if(this.EnableClientScript)this.GenerateScript();
base.OnPreRender(e);
}
//发生并向页面注进客户端考证剧本
protectedvoidGenerateScript(){
StringBuildersb_Script=newStringBuilder();
sb_Script.Append("<scriptlanguage="javascript">
");
sb_Script.Append("functioncb_vefify(val){
");
sb_Script.Append("varisValid=false;
");
sb_Script.Append("varval=document.all[document.all[""+this.ID+""].controltovalidate];
");
sb_Script.Append("varcol=val.all;
");
sb_Script.Append("if(col!=null)
");
sb_Script.Append("for(i=0;i<col.length;i++)
");
sb_Script.Append("if(col.item(i).tagName=="INPUT")
");
sb_Script.Append("if(col.item(i).checked)isValid=true;
");
sb_Script.Append("returnisValid;");
sb_Script.Append("}
");
sb_Script.Append("</script>");
this.Page.RegisterClientScriptBlock("RBLScript",sb_Script.ToString());
//经由过程设置考证器的evaluationfunctionattribute来指定其客户端考证逻辑
this.Attributes["evaluationfunction"]="cb_vefify";
}
}
}
■我很丑但是我很无能-正则表达式(RegularExpression)
正则表达式被用于形貌某一类特定格局的字符串办法,能简便地、能多少倍数地改良文本处置效力,但它不招人疼以是让人讨厌,缘故原由并非观点有多深邃,次要是它长得太丑!一个字符串是不是切合某一类特定格局的字符串,关头在于它是不是切合这个特定格局的多个婚配划定规矩。
了解正则表达式的钥匙在于提炼每条婚配划定规矩的三个要素:字符子集、反复次数与地位。例字符串"两位数字开首三位英笔墨母开头",写正则表达式之前必要我们这么变更句式:"开首数字{2位}恣意字符{0或多位}字母{3位}开头",正则表达式为"^[0-9]{2}[sS]*[a-zA-Z]{3}$"。
在每条婚配划定规矩中,大概呈现的字符子串有个局限,属于流动的字符子集,正则表达式用常量、地区和逻辑运算来暗示这个汇合,如3-2所例,值得注重是部分字符已被界说成元字符,具有特别的寄义。
每条婚配划定规矩中,其字符子集大概呈现反复,能够用两种办法暗示:一是紧随着字符子集后加个年夜括号,内标数字,另外一种用元字符暗示,如3-3例。每条婚配划定规矩中字符子集的地位由其在正则表达式中的地位决意,全部字符串开首用"^"暗示,开头用"$"暗示。
在良多时分,两条或以上的婚配划定规矩大概要用到统一个字符子集,如html标志中,标签声明应该是统一字符子集,好比"<div>……</div>"。假如要界说一个字符子集以便厥后援用,可用小括号标识,用"数字"援用。
正则表达式的使用局限很广,除数据校验外,UBB论坛、页面静态转静态、搜刮手艺等经常呈现它的身影,"我很丑但是我很无能",在这里我们仅仅只是切磋表达式的誊写办法。最初用两个实例总结,如3-4所示。
Java欺骗了我们那么多年,如今的多核时代,我认为它气数已尽! |
|