FrmMain.cs中存在问题

1. int i=0 设定为了全局常量且未在类顶部,出现问题时不好查找

i 属于常用临时变量,设定全局变量容易引起混乱

2.定义的全局变量但仅在一处方法中使用,定义全局变量过多

3.变量名及控件名等意义不明确又缺少注释,如顶部定义的全局变量

long length = ;
long loading = ;
private string oldPath = null;
private int random = ;
private int repeat = ;
private string quotaNum = null;

其他类似 timer1,timer2,l1,l2等等。。。

4. 存在多处重复或相似代码

如下面一段代码

for (int i = ; i < FrmLog.FileListOfLoginedUser.Count; i++)
{
if ((FrmLog.FileListOfLoginedUser[i].Path) == CurrentPath)
{
string itemName = FrmLog.FileListOfLoginedUser[i].ItemName;
string path = FrmLog.FileListOfLoginedUser[i].Path;
string[] itemArr = new string[];
itemArr[] = itemName;
itemArr[] = path;
itemArr[] = FrmLog.FileListOfLoginedUser[i].ItemType;
itemArr[] = FrmLog.FileListOfLoginedUser[i].FileSize.ToString() + "KB";
itemArr[] = FrmLog.FileListOfLoginedUser[i].UploadTime;
itemNameList.Add(itemArr);
}
}

在以下方法中多次调用而没有重构提取出来,日后返回值如有变动需要多处修改很容易混乱

void isSuccess(object iparam, object oparam)  Line : 在138-236 行

private void FrmMain_Load(object sender, EventArgs e) 465-520行

private void 删除ToolStripMenuItem_Click(object sender, EventArgs e)  710-778行

private void btnToParent_Click(object sender, EventArgs e)  返回到上一级 782-842行

private void ChangeListViewDisplayStyle(object sender, EventArgs e)  改变文件列表显示方式 867-907行

private void btnSearch_Click(object sender, EventArgs e)   点击搜索时  1325-1377

另外如下面一段代码,作用是为了检测上传的文件是否存在同名文件,但是在多个方法中反复拷贝了这段代码

for (int j = ; j < files.Length; j++)
{
saveName = Path.GetFileName(files[j]);
int i = ;
for (i = ; i < lvItemsList.Items.Count; i++)
{
ListViewItem item = lvItemsList.Items[i]; if ((lvItemsList.Items[i].Text).Contains(Path.GetFileName(saveName)))
{ if (MessageBox.Show("您已上传文件" + saveName + "有同名,是否覆盖?", "警告", MessageBoxButtons.YesNo) == DialogResult.Yes)
{ repeat = ;
UpLoadFile(FrmLog.ServerUrl + "/Default.aspx/", files[j], saveName, progressBar1);
// timer2.Enabled = true;
i = lvItemsList.Items.Count;
}
else
{
this.Random();
i = lvItemsList.Items.Count;
}
}
}

还有下面一段代码,作用是根据文件字节数改为以KB,MB,GB等方式显示,多处存在类似代码而未提取公用方法

if (FrmLog.FileListOfLoginedUser[j].FileSize *  < )
{
downSize = (FrmLog.FileListOfLoginedUser[j].FileSize * ) + "B";
}
else if (FrmLog.FileListOfLoginedUser[j].FileSize < )
{
downSize = FrmLog.FileListOfLoginedUser[j].FileSize + "KB";
}
else
{
downSize = decimal.Round(Convert.ToDecimal(FrmLog.FileListOfLoginedUser[j].FileSize / ), ).ToString() + "M";
}

该代码存在其他处的代码如下:

if (UsedSpace < )
{ this.Text = "地税云盘 " + FrmLog.LoginedUser.realName + " " + UsedSpace + "KB/" + quotaNum;
}
else
{
float sumFileSize = UsedSpace / ;
//decimal d = decimal.Parse(sumFileSize.ToString());
decimal d = Convert.ToDecimal(sumFileSize);
sumFileSize = float.Parse(decimal.Round(d, ).ToString());
this.Text = "地税云盘 " + FrmLog.LoginedUser.realName + " " + sumFileSize + "M/" + quotaNum;
}

上面代码微改进:

1.提取 "地税云盘  " + FrmLog.LoginedUser.realName + "  "为变量,如下

string title="地税云盘  " + FrmLog.LoginedUser.realName + "  ";

2.以MB显示直接用 (UsedSpace/1024).toString(“f2”)即可

5.代码画蛇添足晦涩难懂又欠缺注释,如

for (int j = ; j < files.Length; j++)
{
saveName = Path.GetFileName(files[j]);
int i = ;
for (i = ; i < lvItemsList.Items.Count; i++)
{
ListViewItem item = lvItemsList.Items[i]; if ((lvItemsList.Items[i].Text).Contains(Path.GetFileName(saveName)))
{ if (MessageBox.Show("您已上传文件" + saveName + "有同名,是否覆盖?", "警告", MessageBoxButtons.YesNo) == DialogResult.Yes)
{ repeat = ;
UpLoadFile(FrmLog.ServerUrl + "/Default.aspx/", files[j], saveName, progressBar1);
// timer2.Enabled = true;
i = lvItemsList.Items.Count;
}
else
{
this.Random();
i = lvItemsList.Items.Count;
}
}
}
if (!(i == lvItemsList.Items.Count + ))
{
UpLoadFile(FrmLog.ServerUrl + "/Default.aspx/", files[j], saveName, progressBar1);
// timer2.Enabled = true;
i = lvItemsList.Items.Count;
}

意图应该是存在同名文件进行提示,点Yes则上传覆盖文件,否则直接上传,这样应该思路很清晰,不知为何还要比较!(i == lvItemsList.Items.Count + 1), 另外!(i == lvItemsList.Items.Count + 1) 这种代码写法有些蹩脚容易让人费解,一般都是 i!=lvItemsList.Items.Count + 1

6. 代码冗长,多次嵌套if else 容易让人看晕,建议提取出方法或添加return

/// <summary>
/// 双击进入文件夹
/// </summary>
private void lvItemsList_MouseDoubleClick(object sender, MouseEventArgs e)
{
this.isFind = false;
ListViewHitTestInfo info = lvItemsList.HitTest(e.X, e.Y); if (info.Item == null) return;
lvItemsList.LargeImageList = UrlImage.SmallImageList; if (!(info.Item.Text.Contains(".")))//todo 此处存在问题,文件夹也可包含点 .,应以itemtype判断
{
lvItemsList.Items.Clear();
CurrentPath = info.Item.Tag.ToString() + "/" + info.Item.Text;
// CurrentPath = info.Item.Tag.ToString() + "/" + info.Item.Text;
FrmLog.FileListOfLoginedUser = this.GetFileList();
oldPath = info.Item.Tag.ToString(); if (FrmLog.FileListOfLoginedUser == null)
{
this.lblCurPath.Text = CurrentPath;
return;
}
for (int i = ; i < FrmLog.FileListOfLoginedUser.Count; i++)
{
if (FrmLog.FileListOfLoginedUser[i].Path == CurrentPath)
{
ListViewItem lvItem = new ListViewItem();
lvItem.Text = FrmLog.FileListOfLoginedUser[i].ItemName;
lvItem.Tag = FrmLog.FileListOfLoginedUser[i].Path;
if (switchViews == "")
{
/* if (!(lvItem.Text.Contains(".")))
{
lvItem.ImageIndex = 0;
}
else
{
int icon = UrlImage.ImageIndex(System.IO.Path.GetExtension(lvItem.Text));
lvItem.ImageIndex = icon;
}*/
int icon = ;
if (FrmLog.FileListOfLoginedUser[i].ItemType == "文件夹")
{
icon = UrlImage.ImageIndex(".folder");//新加
}
else
{
icon = UrlImage.ImageIndex(System.IO.Path.GetExtension(lvItem.Text));//新加
}
lvItem.ImageIndex = icon;//新加 //int icon = UrlImage.ImageIndex(System.IO.Path.GetExtension(lvItem.Text));
//lvItem.ImageIndex = icon;
// oldPath = FrmLog.FileListOfLoginedUser[i].Path; this.lvItemsList.Items.Add(lvItem);
}
else
{
lvItem.SubItems.Add(FrmLog.FileListOfLoginedUser[i].ItemType);
if (!(lvItem.Text.Contains(".")))
{
lvItem.SubItems.Add("");
}
else
{
lvItem.SubItems.Add(FrmLog.FileListOfLoginedUser[i].FileSize.ToString() + "KB");
} // lvItem.SubItems.Add(FrmLog.FileListOfLoginedUser[i].FileSize.ToString());
lvItem.SubItems.Add(FrmLog.FileListOfLoginedUser[i].UploadTime);
this.lvItemsList.Items.Add(lvItem); } }
else
{
oldPath = info.Item.Tag.ToString();
}
}
this.lblCurPath.Text = CurrentPath;
}
}

代码Review发现问题的更多相关文章

  1. 前端代码质量保障之代码review

    经验丰富的程序员和一般程序员之间的最大区别,不仅体现在解决问题的能力上, 还体现在日常代码的风格上.掌握一门技术可能需要几月,甚至几周就够了. 好的习惯风格养成却需数年. 团队成员之间需要合作,代码需 ...

  2. 由学习《软件设计重构》所想到的代码review(一)

    前言 对于一个程序猿来讲怎样来最直接的来衡量他的技术能力和产出呢?我想最直观的作法是看他的代码编写能力,就拿我常常接触的一些程序猿来看,他们买了非常多技术重构类书籍.可是看完后代码编写能力并没有显著提 ...

  3. 对于近阶段公司代码 review 小结

    来新公司,给公司的SDK review了一下.发现了不少小问题,在此总结一下. (我下面说明问题可能是很简单,但是搞清楚某些问题还是花了些时间的,大家引以为戒吧) 先谈谈处理的问题: 1.某天QA说有 ...

  4. 代码review

    对于代码review个人也有些小小的看法: 1.首先我觉得我们所有开发人员要弄明白 现在Code Review 的目的 ,凡事不弄明白目的,无法做好完成一件事情,个人觉得有以下一些目的: a)可以在项 ...

  5. Gerrit代码Review实战

    代码审核(Code Review)是软件研发质量保障机制中非常重要的一环,但在实际项目执行过程中,却因为种种原因被Delay甚至是忽略.在实践中,给大家推荐一款免费.开放源代码的代码审查软件Gerri ...

  6. 敏捷开发:代码Review

    热情高涨 代码走查作为一种流程形式,起初大家的参与热情非常高涨. 因为,自己可以学习到别人一些巧妙的思想,自己的代码和习惯都暴漏出来. 这个过程中不断地吸收和改正. 但是...... 我们一开始组织的 ...

  7. 部署代码review和CI

    公司原先搭了一个代码Review的服务器,由于历史原因,装的是一个32bit的Ubuntu系统,后来由于需要,需要安装gitlab,由于gitlab需要64位系统,所以临时凑合了个vagrant,本质 ...

  8. 代码review的流程

    以前我们一直都是如果要进行代码review的时候,要不我们就直接用idea来进行查看,根据不同的来查看 但是我们都是看代码的不同来进行来实现的,其实我们不需要这样,我们可以使用工具Phabricato ...

  9. 研发团队如何借助Gitlab来做代码review

    代码review是代码质量保障的手段之一,同时开发成员之间代码review也是一种技术交流的方式,虽然会占用一些时间,但对团队而言,总体是个利大于弊的事情.如何借助现有工具在团队内部形成代码revie ...

随机推荐

  1. BAT 批处理脚本 教程 【转】

    BAT 批处理脚本 教程 第一章 批处理基础 第一节 常用批处理内部命令简介 批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD.这些命令 ...

  2. 京东2018秋招c++岗 神奇数

    题意大概是: 一个数比如242,把所有数字分成两组,而且两组的和相等,那么这个数就是神奇数,此时242,能够分成{2,2}和{4},所以242是神奇数. 题目要求输入n和m求[n,m]区间内神奇数的个 ...

  3. 微信小程序:封装全局的promise异步调用方法

    微信小程序:封装全局的promise异步调用方法 一:封装 function POST(url, params) { let promise = new Promise(function (resol ...

  4. Python决定一个变量时局部的,还是全局的,是在编译期

    Python中的变量名是在编译时就解析好的,换句话说,在编译时(也就是在交互控制台输入代码是或者import文件时),Python就已经决定一个变量应该是局部变量,还是全局变量.来看下面的例子: &g ...

  5. Bus of Characters(栈和队列)

    In the Bus of Characters there are nn rows of seat, each having 22 seats. The width of both seats in ...

  6. P4编程环境搭建

    本文参照了sdnlab上相关文章的搭建推荐. 使用的系统环境为ubuntu 18.04 组件介绍 主要安装五个组件: BMv2:是一款支持P4编程的软件交换机 p4c:是一款P4的编译器 PI:是P4 ...

  7. 【数位DP】题集

    1.[HDOJ2089] 题意:求区间内不出现4和62的数的个数 解法:模板题 2.[HDOJ3555] 题意:求区间内不出现49的数的个数 解法:模板题 3.[HDOJ5179] 题意:对于一个十进 ...

  8. Uncaught Error: Syntax error, unrecognized expression: |117的js错误

    117指的是js代码在浏览器运行时的出错的行号 var  a="117|117" 前面的错误是由于有特殊符号“|”,用$("txtId"+a).val();去取 ...

  9. BZOJ 1179 Atm(强连通分量缩点+DP)

    题目说可以通过一条边多次,且点权是非负的,所以如果走到图中的一个强连通分量,那么一定可以拿完这个强连通分量上的money. 所以缩点已经很明显了.缩完点之后图就是一个DAG,对于DAG可以用DP来求出 ...

  10. hdu 1142 A Walk Through the Forest (最短路径)

    A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Jav ...