编程常见问题总结
编写程序过程中,不加注意,会出现好多微不足道的小毛病,有些问题非常低级,尤其是在对代码规范要求不严格的公司里,这些毛病积累起来,可能会要了软件产品的小命,回顾了最经做的几个项目,总结了以下问题。我自己整理的,有问题欢迎讨论!
常见问题
一、 C# 代码编写方面
1    不能因为项目进度而牺牲代码质量,不然代码质量会严重影响你的项目进度。
2    对代码质量的要求多么苛刻都不过分,省一分钟的将就,会浪费一天的维护时间。
3    DataTableDataGridView控件中取值时,不要用数据序号标志取哪一列的值。
      (1) dr[0]dr[2]this.dataGridView1.Rows[e.RowIndex].Cells[6].Value
      (2)dr[“userName”]dr[“ISBN”]this.dataGridView1.Rows[e.RowIndex].Cells["targRID"].Value
中字段多时很难一一对应,伤神费力;
的方法耦合性强,如果取值的语句中列的顺序变了,程序就得跟着变。
可按照(2)中的方法用 名字来标志列。
4    方法间传值,应尽量避免用很长的数组做为参数。原因是:值不好对应、耦合性太强。
        可以用哈希表、封装成一个类、用结构体来实现。用哈希表Key、类属性名、结构体的属性名来标识。
 
5    变量定义在循环结构内和定义在循环体外的区别。
for(int i=0; i < 10 ; i ++)
{
int j = i;
vs编程软件
}
int j=0;
for(int i=0; i < 10 ; i ++)
{
j= i;
讨论:
1)中的写法是每次循环都要为变量j分配一个新的空间。结束一次循环后,会自动回收本次循环的变量,但根据语法规则,这种声明方式是没任何问题的。
2)中变量要定义一次,多次赋值,少了频繁地定义与回收。建议使用(2)的方法。
6    代码中尽量不要有汉字,DataTable列名、DataGridView的列名尽量不用汉字。
(1)if(orderState==”下单成功”)
(2)if(orderState==”OrderOK”)
  遇到订单状态等可以枚举的值 ,可以定义一个枚举。
7    不能用方法返回的异常信息,做为程序流程判断的标准。如下:
int Count =UpdateZt(Managerid, targetZt,ref err);
      if(err.IndexOf("未将对象引用设置到对象的实例")!=-1){….}
8    遇到非托管代码部分,要手动释放内存。可以定义Try{ } catch {} finally{} 结构,将释放内存的操作放在finally内。以下是平台未释放excel进程的例子。
     
9    所有有可能为null的地方都要判断,杜绝理想编程。包括:页面传的值 、方法返回值等。
 
10 所有界面上要输入数字的地方,都要做类型判断,页面和后台代码都要验证。
11 适时地用缓存。不重要的系统设置、基础字典信息等不经常更新的东西非常适合放入缓存。
12 SQL语句不要以拼字符串的方式组织。要以变量方式。存储过程中也要以参数形式。
(1)        拼字符串方式容易造成SQL注入式攻击,有的网站能用(' or 1'='1' or '1'=')登录。
(2)        拼字符串方式会因特殊字符造成执行失败,如语句中有 单引号、冒号等。
(3)        拼字符串方式的语句不利于数据库级别的优化。因为Oracle数据库可以缓存一部分语句,如果再遇到相同的语句,就能提高执行效率,而以变量方式的语句,每个执行的语句是相同的。
13 有数据库多表同时操作时,一定要用事务。
14 注意float类型值在加减乘除时,会出现误差的情况。
15 程序中定义变量,起名要有意义,不要定义名字类似“XX””XXXX”“sdfs”的变量,当时想着,先实现,再改名,然而之后一般不会去改。
16 不要写太长的方法。比如有100多行或者几百行,甚至上千行,那肯定有问题,肯定可以分拆成几个方法。一可以将共同的部分封装,二能提高方法的可读性。
17 取前多少行的写法不同,取得的结果也是不同的
取最新出版的10个商品(带order by的)
1 、第一种写法
select spxxid, spbh, CBNY, pm, dj, zz, dt, xt, WSJG  from jt_j_spxx
        where SFSJ = 1 and cbny is not null and rownum<=10
        order by CBNY desc
  结果是前10行里符合条件的再排序
2 第二种写法
select *
  from (select spxxid, spbh, CBNY, pm, dj, zz, dt, xt, WSJG  from jt_j_spxx
        where SFSJ = 1  and cbny is not null  order by CBNY desc)
where rownum <= 10
  结果是符合条件的排序后,再取前10
18 在新建立一个方法前,确认是否已存在实现些功能的方法,不要造成重复编写。(别人已写过)
19 程序优化是一个日常性的过程,当初设计比较好的程序结构可能会有所修改,每次修改完,最终要求的功能实现了并不算完,应该再想想是不是应该封装的封装,应该调整的调整。如:
(1)    当时为了快速达到效果,定死的变量你提取出来了吗?(email
(2)    你有没有将可以封装的部分提取出来,别的地方可以很容易地调用?(tjbb title

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。