编写容易被维护的代码(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);

而恰恰是这些往往是将来很可能变动的!
下一篇我们看看如何可以重构一下代码。。。
posted @ 2005-09-28 18:22  成为-行动-拥有(BeDoHave)  阅读(863)  评论(0)    收藏  举报