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)不同层次的函数放在什么地方,这是个架构问题?

  • 相关阅读:
    Android系统源代码下载
    Windows Embedded Compact 7初体验
    windowsmobile 开发环境
    Windows X64汇编入门(1)
    汇编语言的Hello World
    如何构建Win32汇编的编程环境(ONEPROBLEM个人推荐)
    音频视频解决方案:GStreamer/ffmpeg/ffdshow/directshow/vfw
    汇编开发环境
    DirectX
    关于DirectShow SDK 和Windows SDK,及DirectX SDK
  • 原文地址:https://www.cnblogs.com/code-style/p/3332946.html
Copyright © 2011-2022 走看看