标签:style blog class c code java
我们的程序课只关心能不能把一个功能实现。不会关注怎么实现以及背后的我坚信性能非常重要,给客户做项目,三天两头出问题,动不动系统写出来的网站访问量一大就报503.经常遭到黑客攻击,资料被改得后果很严重.
举几个个课堂例子说明此原则:
//字符串拼接
下面是课堂上的代码
string sqlstr="insert into 库存(‘"+txt_hh+"‘"+
",‘"+txt_hm +
"‘,‘" +
txt_gg + "‘," +txt_jldw + ",‘"+
txt_kcsl + "‘,‘"+txt_jhrq + "‘,‘"
+txt_shr + "‘,‘" +
txt_ghs + "‘,‘"+
")"
抬头看到这坨东西,心里非常不我看了老师调试这段代码,短短不过10行,错误单单上面的sqlstr他就改了很多次,不是少了引号就是漏了括号,有次是txthh没有加.老师语重心长地说这块不好看懂,你们多多我当即提出,拼接出来sql语句缺点太多,写得这么费劲,看的也吃力,改起来费劲加费劲,为什么一定要用这种方法拼接sql他回答:方法有很多,这种方法在所有的语言都适用。只要熟练了不写错就听起来貌似很对是不是?我当时就震惊了,原来他所谓的写代码原则是兼容所有的语言?!!还指望把C#代码放到apache、tomcat上运行吗?
的确很多语言都支持拼接字符串。但是有点经验的程序员绝对不会用
原因有三:
第一:非常危险,容易拼接出恶意语句(最主要原因)。
第二:.NET中字符串对象恒定。连接会产生很多中间对象,性能浪费。
第三:看起来写起来改起来都麻烦,非常容易出错。
我的观点是:拼sql语句方法多多,每一种都比拼接字符串强百倍。既然学的是C#.NET那么就应该用这种语言最最高效 最最简洁 最最干净的方式解决问题。学语言的原则是只学一门,一通百通。用不着照顾其他语言。什么都顾及,搞在一块儿 最后什么都不会。
下面是一种稍微好一点的方法
string sql = String.Format("insert into tblStudent values (‘{0}‘,‘{1}‘,‘{2}‘,‘{3}‘)", txtName.Text.Trim(), txtGender.Text.Trim(), txtAddress.Text.Trim(), txtPhone.Text.Trim() );
//妈妈再也不用担心少引号了
最好的办法是用参数:
return SqlHelper.ExecuteNonQuery(CommandType.Text, "insert into tblStudent values (@tSName, @tSGender, @tSAddress, @tSPhone, @tSAge, @tSBirthday, @tSCardId, @tSClassId)", new SqlParameter("@tSName", SqlDbType.NVarChar) { Value = _name }, new SqlParameter("@tSGender", SqlDbType.NChar) { Value = _gender }, new SqlParameter("@tSAddress", SqlDbType.NVarChar) { Value = _address }, new SqlParameter("@tSPhone", SqlDbType.VarChar) { Value = _phone }, new SqlParameter("@tSAge", SqlDbType.Int) { Value = _age }, new SqlParameter("@tSBirthday", SqlDbType.DateTime) { Value = _birthday }, new SqlParameter("@tSCardId", SqlDbType.VarChar) { Value = _cardId }, new SqlParameter("@tSClassId", SqlDbType.Int) { Value=_classId} );
优点:安全。再也不担心引号问题,因为这里根本用到引号。整齐,美观,大气。
//滥用ToString()
//这也是课堂的代码
string sqlstr="insert into
库存(‘"+
txt_hh.Text.Trim().ToString()+"‘"+",‘"+
txt_hm.Text.Trim().ToString()
+ "‘,‘" +
txt_gg.Text.Trim().ToString() + "‘,"
+
txt_jldw.Text.Trim().ToString() +
",‘"+
txt_kcsl.Text.Trim().ToString() +
"‘,‘"+
txt_jhrq.Text.Trim().ToString() + "‘,‘"
+
txt_shr.Text.Trim().ToString() + "‘,‘"
+
txt_ghs.Text.Trim().ToString() + "‘,‘"+
")"
try
{
...
}
catch(Exception
ex)
{
MessageBox.Show(ex.Message.ToString());
}
众所周知,Trim()返回值和属性Message已经是个字符串,再来个ToString()。不仅显得多此一举,而且很难看。
我提出这个疑问,老师回答:这是为了照顾低版本.NET,他的意思就是说低版本的框架类库中,Exception的Message不是String类型
于是我翻出了比较老的.NET2.0版本Exception类源码。
如下:
一切用事实说话。他讲的是错误的!.NET1.0.的Message也是String。只是手头没有1.0的源码,但可以证明。
//标识符的命名不规范
网页课讲动态网页,用的是dreamweaver。不写代码,就拖控件设属性。两三下就搞了一个动态网站。我晕啊。
用的是古老的vbscript.在Html5
CSS3和成为业界潮流的今天。这。。。
有那么一个项目名叫lyb。有那么一堆变量分别叫做xjldw,kcsl,jhrq,shr
ghs,rq,hh,nl,hm,gg,x,hh,xm,xb,xh,xxa,xxb,xxxc,XX你个大XX!
我当时就琢磨:lyb究竟是什么意思。后来经人指点,留言板。额。留言板难道不应该叫GuestBook吗。再不济,写个LiuYanBan也行。
写出来的代码只有你自己看得懂,别人难以维护。
诚然,代码最主要就是实现功能。不管你怎么写给变量起名字,加无数个ToString()。对现在的电脑 影响可以忽略不计。
但是项目一大,几十万行的代码
有一半是,kcsl,jhrq,shr ghs,rq,hh,n这些东西。能让人不崩溃?
能否养成良好的习惯决定你在这条路上能走多远
对此类问题的讨论到此为止吧。不打算再给任何人尝试提建议了。
谈写代码的原则:性能高效 方法简洁 思路清晰 整体美观,布布扣,bubuko.com
标签:style blog class c code java
原文地址:http://www.cnblogs.com/hoosway/p/3744066.html