从一个学员的代码看源代码管理

前言

最近做了一个项目,其中有个日志模块。功能要求很是简单,只要从文件中读取日志并显示即可。但是项目是一个新手程序员做的,现在面我们来看看这个新手程序员做的内容有什么问题。

界面

界面使用了一个二维列表,显示时间、日志内容和时间等信息。由于不是关注重点,且界面也能够满足需求,所以就不再讨论。

后台代码

以下是最主要的读取代码。

private void 日志_Load(object sender, EventArgs e)
{
	this.listView1.Items.Clear();
    this.listView1.BeginUpdate();
    StreamReader sr = new StreamReader(Common.StartFolder + "\\record.log");
    while (sr.Peek() > 0)
    {
        string x = sr.ReadLine();
        if (!x.Contains(","))
            continue;
        string[] content = x.Split(',');
        if (content.Length == 4)
        {
            ListViewItem item = new ListViewItem();
            item.Text = content[0];
            item.SubItems.Add(content[1]);
            item.SubItems.Add(content[2]);
            item.SubItems.Add(content[3]);
            listView1.Items.Add(item);
        }
    }
    sr.Close();
    this.listView1.EndUpdate();
}

从以上代码中,我们可以看到,数据读取、数据拆分和界面关联完成混在了一起。这样的代码耦合度太高,而且没有任何可复用的内容,同时如果界面上的顺序需要修改,也会比较麻烦。

修改建议

首先,既然日志是一个可能常用的内容,我们应该定义一个日志类。如下所示,我们即定义了类的属性,还定义了几个可能用到的方法。

public class TranLog
{
	public int StartID;
	public int EndID;
	public int LogTime;
	public string Result;

	public string[] ToStrings1 ()
	{
		// 代码略。
	}
	
	public static TranLog Parse(string s)
	{
		// 代码略。
	}

	public static TranLog[] Load(string file)
	{
		// 代码略
	}
}

有了以上的代码定义,现在我们再看看客户端的代码,可以进行以下优化。

private void 日志_Load(object sender, EventArgs e)
{
	listView1.Items.Clear();
	listView1.BeginUpdate();
	foreach(var log in TranLog.Load(Common.StartFolder + "\\record.log"))
		listView1.Items.Add(new ListViewItem(log.ToStrings1());
	listView1.EndUpdate();
}

通过重新编写以后,客户端的代码只有以下几行。业务逻辑也变得非常清晰,即加载和界面填充,从面极大地简化了代码。这样的化简不仅易于阅读,同样也易于管理。

发布了326 篇原创文章 · 获赞 94 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/weixin_43145361/article/details/100555731