代码抽象层次2

看了kent的实现模式,对代码抽象层次有了一点理解,kent首先问了一个问题,下面的代码有神马问题?

void compute()

{

     int flag = input();

     flag |= 1;

     output(flag);

}

粗看来没有,但其实不然,但其实,input和output已经是高层抽象了,例如你并不知道输入来自于何方,到底是键盘输入呢,还是文件输入,又或者是网络输入,同样output也是如此,但是中间设置flag的语句则是一个低层抽象,如果整个函数都是低层抽象,代码应该是这样:

void compute()

{

    extern char *s;

    int flag = 0;

    scanf("%d",&flag);

    flag |= 1;

     

    switch(flag)

    {

        case 1:

            fprintf(logHandler,"%s\n",s)

        case 2:

            send(serverSocket,s,length(s),0);

    }

}

反之,如果函数是一个高层抽象的函数,代码应该是这样:

void compute()

{

     int flag = input();

     setFlag(&flag);

     output(flag);

}

更进一步的,如果flag的位1在业务逻辑的意义是保存到日志里,那么代码应该是这样的:

void compute()

{

     int flag = input();

     ensureSaveToLog(&flag); //保证一定会保存到日志

     output(flag);

}

将高层逻辑和低层逻辑剥离的最大好处时,高层逻辑不用管低层逻辑是怎么实现的,即所谓的解耦,低层逻辑从键盘读也好,从文件读也好,那是低层逻辑的事情,而且低层逻辑改变实现,这事对于高层逻辑也是透明的

疑问:

1)层次不应该太多,层次太多则小函数太多,未必好

2)不同层次的函数放在什么地方,这是个架构问题?

 

你可能感兴趣的:(代码)