哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

電子發(fā)燒友App

硬聲App

掃碼添加小助手

加入工程師交流群

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>C語言|源代碼>程序員過度封裝的弊端

程序員過度封裝的弊端

2017-09-26 | rar | 0.3 MB | 次下載 | 1積分

資料介紹

  過度封裝是程序員最容易犯的錯, 因為是否過度并沒有固定的數(shù)值標準, 只能是有經(jīng)驗的程序員基于科學的判斷。過度封裝的危害十分嚴重, 所以必須重視, 并且極力避免。

  首先, 什么是“過度封裝”? 我們知道, 計算機科學領域最稱為經(jīng)典也是最強大的思想便是遞歸, 分而治之。但是, 遞歸本身最重要的因素是: 結(jié)束條件。 一生二, 二生三, 三生萬物, 總要有終止的條件吧? 不然一輛車不停地急馳, 你怎樣上車?

  新手程序員, 特別是非科班出身的文科程序員, 最容易犯了過度封裝的錯誤的原因就是不知道何時適可而止, 腦筋往往不斷地分解分解再分解問題, 最后, 你看到的就是這個調(diào)用那個, 那個引用這個, 亂七八糟毫無頭緒, 三兩行代碼的函數(shù)比比皆是, 自以為封裝抽象, 其實是拿捏不好這個度。

  一旦過度封裝, 直接的危害往往是寫了無數(shù)行代碼, 封裝了N多個類, 就是看不出一個完整的功能, 因為分裂起來收不住。即使最終把功能實現(xiàn)了, 代碼維護性也讓人不忍直視。

  如何判斷是否過度封裝? 如何避免過度封裝? 我認為, 只要掌握了一個原則, 時刻以這個原則為準繩, 那便幾乎不會犯過度封裝的錯誤。

  這個原則便是“直觀優(yōu)先”原則, 代碼邏輯以直觀為最優(yōu)先的原則, 其它的原則均低于此原則, 即使有一百個考慮, 如果違反了直觀原則, 都必須放棄掉而優(yōu)先保證直觀原則。

  舉一個例子:

  function closeDialog() { login.close(); message.close(); 。。.close(); } var action = { close: function () { closeDialog(); }, backout: function () { if (BACKOUT_ID) { 。。. } } }; $(document).on(’click‘, function (e){ var $that = $(e.target); for ( var k in action) { if ( $that.hasClass(’action-‘+k) ) { action[k].call(e.target); } } });

  這樣的代碼就是過度封裝的經(jīng)典體現(xiàn)!

  首先, closeDialog() 這個函數(shù)不應該存在, 而應該被展開, 因為函數(shù)只被調(diào)用一次, 而且沒有邏輯上的獨立性的必要。

  其次, 上面的函數(shù)通過跳轉(zhuǎn)表的方式來逃避直接的函數(shù)調(diào)用, 這是對跳轉(zhuǎn)表技術的極大濫用! if-else 加函數(shù)調(diào)用是最直觀的分支跳轉(zhuǎn)方式, 完全沒有必要在這個例子里使用跳轉(zhuǎn)表技術。

  先解釋一下什么是跳轉(zhuǎn)表技術, 這是一個非常古老而基礎的計算機編程領域的技術。跳轉(zhuǎn)表包含很多層含義, 簡單的說, 就是將邏輯代碼塊放到一個索引表中, 代碼編寫過程通過傳遞索引項來最終調(diào)用相應的邏輯代碼塊(因為多處引用)。

  第一次聽到或者見到跳轉(zhuǎn)表技術的程序員的心情, 如果你想體驗的話, 你想想當你寫了無數(shù)的 if-else 之后, 你發(fā)現(xiàn)了 switch-case 時的心情, 或者是你第一次聽到函數(shù)指針這個事物時的心情。

  但是, 像 js 之類高級語言, 已經(jīng)把跳轉(zhuǎn)表技術, 直接融合到了語言的語法本身, 如類(class)。 你不需要實現(xiàn)自己的跳轉(zhuǎn)表技術, 你只需要用好語言本身的特性即可。

  所以, 上面的代碼應該改成:

  $(document).on(’click‘, function (e){ var $that = $(e.target); if ( $that.hasClass(’action-close‘) ) { login.close(); message.close(); 。。.close(); } if ( $that.hasClass(’action-backout‘) ) { if (BACKOUT_ID) { 。。. } } });

  這是最直觀, 最正常, 人人都應該寫成這樣的代碼。如果你還想顯式地使用查找表技術以體現(xiàn)自己牛逼, 我是說, 如果你真想裝逼的話, 你可以這樣寫:

  var action = { close: function () { login.close(); message.close(); 。。.close(); }, backout: function () { if (BACKOUT_ID) { 。。. } } }; $(document).on(’click‘, function (e){ var $that = $(e.target); var func_name = $(that).attr(’action‘); if(func_name && action[func_name]){ action[func_name](); } });

  如果都這樣寫了, 那和直接在 html 標簽里寫 onclick 屬性有什么區(qū)別? 難道通過 class 綁定事件就高級, 寫 onclick 指明回調(diào)函數(shù)的名字就不高級了?

  所以我勸你最好不要裝逼也別裝傻, 乖乖地有理有據(jù)有邏輯地寫代碼, 讓代碼的邏輯直觀起來, 不要過度封裝。如果你內(nèi)心封裝的欲望太強的話, 那我勸你學學 Go 語言, 把自己的思想強加到一種自己新發(fā)明的語言上來(我估計你沒那種本事)。不然, 直觀優(yōu)先, 不要過度封裝。

代碼
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1MDD品牌三極管BC807數(shù)據(jù)手冊
  2. 3.00 MB   |  次下載  |  免費
  3. 2MDD品牌三極管BC817數(shù)據(jù)手冊
  4. 2.51 MB   |  次下載  |  免費
  5. 3MDD品牌三極管D882數(shù)據(jù)手冊
  6. 3.49 MB  |  次下載  |  免費
  7. 4MDD品牌三極管MMBT2222A數(shù)據(jù)手冊
  8. 3.26 MB  |  次下載  |  免費
  9. 5MDD品牌三極管MMBTA56數(shù)據(jù)手冊
  10. 3.09 MB  |  次下載  |  免費
  11. 6MDD品牌三極管MMBTA92數(shù)據(jù)手冊
  12. 2.32 MB  |  次下載  |  免費
  13. 7STM32G474 HRTIME PWM 丟波問題分析與解決
  14. 1.00 MB   |  次下載  |  3 積分
  15. 8新能源電動汽車高壓線束的銅鋁連接解決方案
  16. 2.71 MB   |  次下載  |  2 積分

本月

  1. 1愛華AIWA HS-J202維修手冊
  2. 3.34 MB   |  37次下載  |  免費
  3. 2PC5502負載均流控制電路數(shù)據(jù)手冊
  4. 1.63 MB   |  23次下載  |  免費
  5. 3NB-IoT芯片廠商的資料說明
  6. 0.31 MB   |  22次下載  |  1 積分
  7. 4H110主板CPU PWM芯片ISL95858HRZ-T核心供電電路圖資料
  8. 0.63 MB   |  6次下載  |  1 積分
  9. 5UWB653Pro USB口測距通信定位模塊規(guī)格書
  10. 838.47 KB  |  5次下載  |  免費
  11. 6技嘉H110主板IT8628E_BX IO電路圖資料
  12. 2.61 MB   |  4次下載  |  1 積分
  13. 7蘇泊爾DCL6907(即CHK-S007)單芯片電磁爐原理圖資料
  14. 0.04 MB   |  4次下載  |  1 積分
  15. 8蘇泊爾DCL6909(即CHK-S009)單芯片電磁爐原理圖資料
  16. 0.08 MB   |  2次下載  |  1 積分

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935137次下載  |  10 積分
  3. 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設計
  4. 1.48MB  |  420064次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233089次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費下載
  8. 340992  |  191439次下載  |  10 積分
  9. 5十天學會AVR單片機與C語言視頻教程 下載
  10. 158M  |  183353次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81602次下載  |  10 積分
  13. 7Keil工具MDK-Arm免費下載
  14. 0.02 MB  |  73822次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65991次下載  |  10 積分
陕西省| 禄丰县| 伊吾县| 东乌珠穆沁旗| 玛纳斯县| 达尔| 麟游县| 永善县| 恩施市| 肥西县| 元氏县| 腾冲县| 湘潭市| 响水县| 九龙城区| 马关县| 竹山县| 青浦区| 亚东县| 永丰县| 元江| 会泽县| 庆元县| 永昌县| 太康县| 嘉义县| 金溪县| 甘德县| 濉溪县| 遵义县| 乌拉特前旗| 元谋县| 行唐县| 漳浦县| 拉孜县| 友谊县| 公安县| 石渠县| 图木舒克市| 桓台县| 蒙山县|