编写容易被维护的代码(1)
我接触过很多非常聪明的学生,做事很快,喜欢专研。但是往往这种学生的代码看起来比较费.也许是他们太多考虑性能,也许是他们认为自己的程序别人容易被别人修改就不是高手了吧。
我喜欢愿意和别人交流合作的同学。下面的几篇文章希望对大家编写企业所需的代码有所启发,下面开始正题吧。
一、目标
本示例再简单不过了:输入一组整数,计算它们的结果并把数据和结果打印出来。
二、实现
namespace Castle.Demo {
using System;
public enum MathMethod :int {Add,Multiply};
public class DefaultBiz {
private int[] _data;
private long _result;
public DefaultBiz (int [] d) {
_data=d;
_result=0;
}
public void printResult(MathMethod method) {
_result=getResult(method);
Console.WriteLine("MathMethod-->{0}",method);
for(int i=0;i<_data.Length;i++)
Console.WriteLine("数据{0}:{1}",i.ToString(),_data[i].ToString("D3"));
Console.WriteLine("Result-->{0}",_result);
}
private long getResult(Castle.Demo.MathMethod math) {
long sum=_data[0];
for(int i=1;i<_data.Length;i++)
if(math==MathMethod.Multiply) sum*=_data[i];
else sum+=_data[i];
return sum;
}

}
}
三、检验
namespace Castle.Demo {
using System;
using NUnit.Framework;

[TestFixture]
public class Tester {
[SetUp]
public void Init() {
}
[TearDown]
public void Finish() {
}
[Test]
public void testAdd() {
int[] data=new int[]{1,2,3,4,5,6,7,8,9,10};
DefaultBiz biz=new DefaultBiz(data);
biz.printResult(MathMethod.Add);
}
[Test]
public void testMutiply() {
int[] data=new int[]{1,2,3,4,5,6,7,8,9,10};
DefaultBiz biz=new DefaultBiz(data);
biz.printResult(MathMethod.Multiply);
}
}
}我们执行单元测试,果然如我们所愿,但是有心的同学很快就会发现两个明显的问题:
1)算法硬编码;
for(int i=1;i<_data.Length;i++)
if(math==MathMethod.Multiply) sum*=_data[i];
else sum+=_data[i];2)打印方式太固定;
Console.WriteLine("MathMethod-->{0}",method);
for(int i=0;i<_data.Length;i++)
Console.WriteLine("数据{0}:{1}",i.ToString(),_data[i].ToString("D3"));
Console.WriteLine("Result-->{0}",_result);而恰恰是这些往往是将来很可能变动的!
下一篇我们看看如何可以重构一下代码。。。



浙公网安备 33010602011771号