zoukankan      html  css  js  c++  java
  • 代码抽象层次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
    ",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)不同层次的函数放在什么地方,这是个架构问题?

  • 相关阅读:
    堆排序
    搭建Struts2开发环境
    直接插入排序的小改进——希尔排序
    一个名声不好的排序算法(二)——冒泡排序算法
    一种名声不好的排序算法——简单选择排序算法
    直接插入排序算法:ArrayList实现和数组实现
    反射技术初步
    JAVA如何实现深拷贝
    书籍推荐(暂定,待续)
    Q/Z
  • 原文地址:https://www.cnblogs.com/code-style/p/3332946.html
Copyright © 2011-2022 走看看