代碼抽象層次

來源:互聯網
上載者:User

看了kent的實現模式,對代碼抽象層次有了一點理解,kent首先問了一個問題,下面的代碼有神馬問題?

void compute(){     int flag = input();     flag |= 1;     output(flag);}
粗看來沒有,但其實不然,但其實,input和output已經是高層抽象了,例如你並不知道輸入來自於何方,到底是鍵盤輸入呢,還是檔案輸入,又或者是網路輸入,同樣output也是如此,但是中間設定flag的語句則是一個低層抽象,如果整個函數都是低層抽象,代碼應該是這樣:
void compute(){     int flag = 0;     scanf("%d",&flag);     flag |= 1;     fprintf(golbalFileHandler,"%d\n",flag);}
反之,如果函數是一個高層抽象的函數,代碼應該是這樣:
void compute(){     int flag = input();     setFlag(&flag);     output(flag);}

更進一步的,如果flag的位1在商務邏輯的意義是資料以圖表形式輸出,那麼代碼應該是這樣:

void compute(){     int flag = input();     setOutputWithChart(&flag);     output(flag);}

將高層邏輯和低層邏輯剝離的最大好處時,高層邏輯不用管低層邏輯是怎麼實現的,即所謂的解耦,低層邏輯從鍵盤讀也好,從檔案讀也好,那是低層邏輯的事情,而且低層邏輯改變實現,這事對於高層邏輯也是透明的

疑問:

1)層次不應該太多,層次太多則小函數太多,未必好

2)不同層次的函數放在什麼地方,這是個架構問題?

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.