摘要:組件的正確依賴于數據的正確,而在開發的過程中不同的開發人員有著不同的風格的數據處理方式。總的來說,就是在編寫這樣復雜的業務組件,我們應該同時編寫相關的輔助函數來方便組件的調用者來使用。
Bug發生原因寫這篇文章的初衷是為了記錄我在修復項目中一個復雜業務組件中的bug而引起其他依賴這個組件的功能無法使用的過程中,對使用、維護復雜業務組件的一些思考
原文地址
我所在的項目組中, 有一個類似樹狀文件管理的需求
對于這樣的需求,當時我設計一個基礎的UI組件treeListView用來實現基礎的樹狀UI, 同時在其基礎上實現了explorer業務組件來實現具體的業務邏輯。
由于是樹狀的視圖,所以在當時設計數據結構時也采用樹作為數據結構。為了能夠方便的查找樹中的數據,我按照系統的文件管理給所有的數據添加了一個path屬性。
但是在實現的時候沒有考慮到同級目錄下面可能同時存在同名的文件夾和文件這種情況,假設文件夾folder下面同時存在名為file的文件和文件夾,這個時候會造成它們的路徑相同,在查找的時候無法區分這兩個數據。修復的方法是在文件夾的路徑后面增加/。
這樣修復后,由于在我們的項目中有許多的地方直接使用path來來做判讀,例如有的地方直接分割path來獲取當前數據的名稱或者其父元素的名稱(雖然有更好的方式獲取這些數據,但是開發過程中可能為了省事直接這樣獲取),或者在新建文件、文件夾時自己手動的拼寫path。
當我按照上面的方式修復bug時,就必須同時修改這個依賴path的函數操作,當項目中的代碼太多時就可能出現遺漏的情況,給代碼的維護帶來很大的困擾。
為什么會出現這么多的問題?問題出現了之后就應該去反思為什么造成現在這樣的局面。誠然有一部分的原因是我們在開發過程中經常會圖方便而隨意的使用數據,但是根本的原因是在對一個復雜的業務組件調用過程中,沒有一個方便、有效的操作造成的。換句話說就是對于組件依賴的數據沒有一個有效的操作造成的。
組件的正確依賴于數據的正確,而在開發的過程中不同的開發人員有著不同的風格的數據處理方式。 一旦數據結構出現了錯誤或者發生了修改,就會導致組件出現意想不到問題。
如何解決這樣的問題?對于業務組件, 我們是可以總結出對這個業務組件的調用的使用情況,例如本文中的explorer組件主要有以下幾種情況:
新建文件夾、文件
刪除文件夾、文件
修改文件夾、文件
根據路徑查找文件夾、文件
根據路徑查找父文件夾
對于這些操作,在組件的編寫過程中我們可以同時編寫對應的輔助函數,
如explorer組件我就編寫下面的輔助函數
return { // 修改屬性操作 modify: modify, // 重命名操作 rename: rename, // 新建操作 create: create, // 復制操作 copy: copy, // 移動操作 move: move, // 刪除操作 remove: remove, // 搜索樹中符合要求的數據 searchTree: searchTree, // 根據路徑返回在樹種的索引 searchByPath: searchByPath, // 根據路徑獲取數據 getDataByPath: getDataByPath, // 根據路徑獲取父目錄的數據 getParentDataByPath: getParentDataByPath, // 根據路徑獲取父目錄路徑 getParentPath: getParentPath // 初始化數據中的path addSourcePath: addSourcePath, // 判斷是否存在同名數據(用于新建時同名判斷) hasSameName: hasSameName };
這樣對于調用者來說,只要使用組件提供的輔助函數就可以方便的使用組件;對于組件的維護者來說,只要保證輔助函數的正確性,就可以保證組件在被調用的過程的正確,方便組件的維護。
總的來說,就是在編寫這樣復雜的業務組件,我們應該同時編寫相關的輔助函數來方便組件的調用者來使用。而我們在開發中也應當避免寫出上文中那樣對數據直接進行操作的代碼,這會導致業務的正確依賴于組件的內部數據相耦合,使組件難以維護。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/89016.html
摘要:背景作為單頁大型應用的框架愛好者的我,不實現個大型應用練練手怎么趕說自己熟練,于是嘗試實現了大部分的進銷存功能。本文主要對實現業務需求中遇到的問題以及解決方案進行闡述。不確保對其他項目有可移植性。 背景 作為單頁大型應用的mv*框架AngularJS愛好者的我,不實現個大型web應用練練手怎么趕說自己熟練ng,于是嘗試實現了大部分erp的進銷存功能。本文主要對實現業務需求中遇到的問題以...
摘要:單元測試針對程序模塊進行測試。是開源的單元測試工具。一個好的單元測試應該具備的條件安全重構已有代碼單元測試一個很重要的價值是為重構保駕護航。斷言外部依賴單元測試的一個重要原則就是無依賴和隔離。 前端測試金字塔 對于一個 Web 應用來說,理想的測試組合應該包含大量單元測試(unit tests),部分快照測試(snapshot tests),以及少量端到端測試(e2e tests)。參...
摘要:是一個專門為應用所設計的集中式狀態管理架構。此時可以幫助我們實現狀態的管理。每個任務都歸屬于一個清單,有唯一的清單。說到這,一個復雜的的基本結構和功能已經出現了。 使用過一些清單類的應用程序,像 WunderList, Google Keep等,用來記錄一些計劃和安排,也試著將自己的計劃安排同筆記一起整理在 Evernote 中,但是無論哪種方式用起來總覺得少了點什么,如果兩者的一些功...
閱讀 701·2021-11-18 10:02
閱讀 2235·2021-11-15 18:13
閱讀 3139·2021-11-15 11:38
閱讀 2934·2021-09-22 15:55
閱讀 3666·2021-08-09 13:43
閱讀 2438·2021-07-25 14:19
閱讀 2449·2019-08-30 14:15
閱讀 3441·2019-08-30 14:15