成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

對(duì)復(fù)雜業(yè)務(wù)組件在實(shí)際開(kāi)發(fā)過(guò)程中被調(diào)用的反思

xorpay / 1445人閱讀

摘要:組件的正確依賴于數(shù)據(jù)的正確,而在開(kāi)發(fā)的過(guò)程中不同的開(kāi)發(fā)人員有著不同的風(fēng)格的數(shù)據(jù)處理方式。總的來(lái)說(shuō),就是在編寫(xiě)這樣復(fù)雜的業(yè)務(wù)組件,我們應(yīng)該同時(shí)編寫(xiě)相關(guān)的輔助函數(shù)來(lái)方便組件的調(diào)用者來(lái)使用。

寫(xiě)這篇文章的初衷是為了記錄我在修復(fù)項(xiàng)目中一個(gè)復(fù)雜業(yè)務(wù)組件中的bug而引起其他依賴這個(gè)組件的功能無(wú)法使用的過(guò)程中,對(duì)使用、維護(hù)復(fù)雜業(yè)務(wù)組件的一些思考

原文地址

Bug發(fā)生原因

我所在的項(xiàng)目組中, 有一個(gè)類似樹(shù)狀文件管理的需求

對(duì)于這樣的需求,當(dāng)時(shí)我設(shè)計(jì)一個(gè)基礎(chǔ)的UI組件treeListView用來(lái)實(shí)現(xiàn)基礎(chǔ)的樹(shù)狀UI, 同時(shí)在其基礎(chǔ)上實(shí)現(xiàn)了explorer業(yè)務(wù)組件來(lái)實(shí)現(xiàn)具體的業(yè)務(wù)邏輯。

由于是樹(shù)狀的視圖,所以在當(dāng)時(shí)設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)時(shí)也采用樹(shù)作為數(shù)據(jù)結(jié)構(gòu)。為了能夠方便的查找樹(shù)中的數(shù)據(jù),我按照系統(tǒng)的文件管理給所有的數(shù)據(jù)添加了一個(gè)path屬性。

但是在實(shí)現(xiàn)的時(shí)候沒(méi)有考慮到同級(jí)目錄下面可能同時(shí)存在同名的文件夾和文件這種情況,假設(shè)文件夾folder下面同時(shí)存在名為file的文件和文件夾,這個(gè)時(shí)候會(huì)造成它們的路徑相同,在查找的時(shí)候無(wú)法區(qū)分這兩個(gè)數(shù)據(jù)。修復(fù)的方法是在文件夾的路徑后面增加/。

這樣修復(fù)后,由于在我們的項(xiàng)目中有許多的地方直接使用path來(lái)來(lái)做判讀,例如有的地方直接分割path來(lái)獲取當(dāng)前數(shù)據(jù)的名稱或者其父元素的名稱(雖然有更好的方式獲取這些數(shù)據(jù),但是開(kāi)發(fā)過(guò)程中可能為了省事直接這樣獲?。?,或者在新建文件、文件夾時(shí)自己手動(dòng)的拼寫(xiě)path

當(dāng)我按照上面的方式修復(fù)bug時(shí),就必須同時(shí)修改這個(gè)依賴path的函數(shù)操作,當(dāng)項(xiàng)目中的代碼太多時(shí)就可能出現(xiàn)遺漏的情況,給代碼的維護(hù)帶來(lái)很大的困擾。

為什么會(huì)出現(xiàn)這么多的問(wèn)題?

問(wèn)題出現(xiàn)了之后就應(yīng)該去反思為什么造成現(xiàn)在這樣的局面。誠(chéng)然有一部分的原因是我們?cè)陂_(kāi)發(fā)過(guò)程中經(jīng)常會(huì)圖方便而隨意的使用數(shù)據(jù),但是根本的原因是在對(duì)一個(gè)復(fù)雜的業(yè)務(wù)組件調(diào)用過(guò)程中,沒(méi)有一個(gè)方便、有效的操作造成的。換句話說(shuō)就是對(duì)于組件依賴的數(shù)據(jù)沒(méi)有一個(gè)有效的操作造成的。

組件的正確依賴于數(shù)據(jù)的正確,而在開(kāi)發(fā)的過(guò)程中不同的開(kāi)發(fā)人員有著不同的風(fēng)格的數(shù)據(jù)處理方式。 一旦數(shù)據(jù)結(jié)構(gòu)出現(xiàn)了錯(cuò)誤或者發(fā)生了修改,就會(huì)導(dǎo)致組件出現(xiàn)意想不到問(wèn)題。

如何解決這樣的問(wèn)題?

對(duì)于業(yè)務(wù)組件, 我們是可以總結(jié)出對(duì)這個(gè)業(yè)務(wù)組件的調(diào)用的使用情況,例如本文中的explorer組件主要有以下幾種情況:

新建文件夾、文件

刪除文件夾、文件

修改文件夾、文件

根據(jù)路徑查找文件夾、文件

根據(jù)路徑查找父文件夾

對(duì)于這些操作,在組件的編寫(xiě)過(guò)程中我們可以同時(shí)編寫(xiě)對(duì)應(yīng)的輔助函數(shù),

explorer組件我就編寫(xiě)下面的輔助函數(shù)

return {
  // 修改屬性操作
  modify: modify,
  // 重命名操作
  rename: rename,
  // 新建操作
  create: create,
  // 復(fù)制操作
  copy: copy,
  // 移動(dòng)操作
  move: move,
  // 刪除操作
  remove: remove,

  // 搜索樹(shù)中符合要求的數(shù)據(jù)
  searchTree: searchTree,
  // 根據(jù)路徑返回在樹(shù)種的索引
  searchByPath: searchByPath,
  // 根據(jù)路徑獲取數(shù)據(jù)
  getDataByPath: getDataByPath,
  // 根據(jù)路徑獲取父目錄的數(shù)據(jù)
  getParentDataByPath: getParentDataByPath,
  // 根據(jù)路徑獲取父目錄路徑
  getParentPath: getParentPath
  // 初始化數(shù)據(jù)中的path
  addSourcePath: addSourcePath,
  
  // 判斷是否存在同名數(shù)據(jù)(用于新建時(shí)同名判斷)
  hasSameName: hasSameName
};

這樣對(duì)于調(diào)用者來(lái)說(shuō),只要使用組件提供的輔助函數(shù)就可以方便的使用組件;對(duì)于組件的維護(hù)者來(lái)說(shuō),只要保證輔助函數(shù)的正確性,就可以保證組件在被調(diào)用的過(guò)程的正確,方便組件的維護(hù)。

總的來(lái)說(shuō),就是在編寫(xiě)這樣復(fù)雜的業(yè)務(wù)組件,我們應(yīng)該同時(shí)編寫(xiě)相關(guān)的輔助函數(shù)來(lái)方便組件的調(diào)用者來(lái)使用。而我們?cè)陂_(kāi)發(fā)中也應(yīng)當(dāng)避免寫(xiě)出上文中那樣對(duì)數(shù)據(jù)直接進(jìn)行操作的代碼,這會(huì)導(dǎo)致業(yè)務(wù)的正確依賴于組件的內(nèi)部數(shù)據(jù)相耦合,使組件難以維護(hù)。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/89016.html

相關(guān)文章

  • FE.FW-AngularJS 1.x 實(shí)現(xiàn)進(jìn)銷存系統(tǒng)感悟與反思

    摘要:背景作為單頁(yè)大型應(yīng)用的框架愛(ài)好者的我,不實(shí)現(xiàn)個(gè)大型應(yīng)用練練手怎么趕說(shuō)自己熟練,于是嘗試實(shí)現(xiàn)了大部分的進(jìn)銷存功能。本文主要對(duì)實(shí)現(xiàn)業(yè)務(wù)需求中遇到的問(wèn)題以及解決方案進(jìn)行闡述。不確保對(duì)其他項(xiàng)目有可移植性。 背景 作為單頁(yè)大型應(yīng)用的mv*框架AngularJS愛(ài)好者的我,不實(shí)現(xiàn)個(gè)大型web應(yīng)用練練手怎么趕說(shuō)自己熟練ng,于是嘗試實(shí)現(xiàn)了大部分erp的進(jìn)銷存功能。本文主要對(duì)實(shí)現(xiàn)業(yè)務(wù)需求中遇到的問(wèn)題以...

    陸斌 評(píng)論0 收藏0
  • React 測(cè)試指南

    摘要:?jiǎn)卧獪y(cè)試針對(duì)程序模塊進(jìn)行測(cè)試。是開(kāi)源的單元測(cè)試工具。一個(gè)好的單元測(cè)試應(yīng)該具備的條件安全重構(gòu)已有代碼單元測(cè)試一個(gè)很重要的價(jià)值是為重構(gòu)保駕護(hù)航。斷言外部依賴單元測(cè)試的一個(gè)重要原則就是無(wú)依賴和隔離。 前端測(cè)試金字塔 對(duì)于一個(gè) Web 應(yīng)用來(lái)說(shuō),理想的測(cè)試組合應(yīng)該包含大量單元測(cè)試(unit tests),部分快照測(cè)試(snapshot tests),以及少量端到端測(cè)試(e2e tests)。參...

    Tecode 評(píng)論0 收藏0
  • 實(shí)現(xiàn)一個(gè)稍微復(fù)雜simplelist

    摘要:是一個(gè)專門為應(yīng)用所設(shè)計(jì)的集中式狀態(tài)管理架構(gòu)。此時(shí)可以幫助我們實(shí)現(xiàn)狀態(tài)的管理。每個(gè)任務(wù)都?xì)w屬于一個(gè)清單,有唯一的清單。說(shuō)到這,一個(gè)復(fù)雜的的基本結(jié)構(gòu)和功能已經(jīng)出現(xiàn)了。 使用過(guò)一些清單類的應(yīng)用程序,像 WunderList, Google Keep等,用來(lái)記錄一些計(jì)劃和安排,也試著將自己的計(jì)劃安排同筆記一起整理在 Evernote 中,但是無(wú)論哪種方式用起來(lái)總覺(jué)得少了點(diǎn)什么,如果兩者的一些功...

    solocoder 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<