成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

xorpay / 1481人閱讀

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

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

原文地址

Bug發(fā)生原因

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

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

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

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

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

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

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

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

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

如何解決這樣的問題?

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

新建文件夾、文件

刪除文件夾、文件

修改文件夾、文件

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

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

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

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

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

  // 搜索樹中符合要求的數(shù)據(jù)
  searchTree: searchTree,
  // 根據(jù)路徑返回在樹種的索引
  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)用者來說,只要使用組件提供的輔助函數(shù)就可以方便的使用組件;對(duì)于組件的維護(hù)者來說,只要保證輔助函數(shù)的正確性,就可以保證組件在被調(diào)用的過程的正確,方便組件的維護(hù)。

總的來說,就是在編寫這樣復(fù)雜的業(yè)務(wù)組件,我們應(yīng)該同時(shí)編寫相關(guān)的輔助函數(shù)來方便組件的調(diào)用者來使用。而我們?cè)陂_發(fā)中也應(yīng)當(dāng)避免寫出上文中那樣對(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://m.hztianpu.com/yun/89016.html

相關(guān)文章

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

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

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

    摘要:?jiǎn)卧獪y(cè)試針對(duì)程序模塊進(jìn)行測(cè)試。是開源的單元測(cè)試工具。一個(gè)好的單元測(cè)試應(yīng)該具備的條件安全重構(gòu)已有代碼單元測(cè)試一個(gè)很重要的價(jià)值是為重構(gòu)保駕護(hù)航。斷言外部依賴單元測(cè)試的一個(gè)重要原則就是無依賴和隔離。 前端測(cè)試金字塔 對(duì)于一個(gè) Web 應(yīng)用來說,理想的測(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è)清單,有唯一的清單。說到這,一個(gè)復(fù)雜的的基本結(jié)構(gòu)和功能已經(jīng)出現(xiàn)了。 使用過一些清單類的應(yīng)用程序,像 WunderList, Google Keep等,用來記錄一些計(jì)劃和安排,也試著將自己的計(jì)劃安排同筆記一起整理在 Evernote 中,但是無論哪種方式用起來總覺得少了點(diǎn)什么,如果兩者的一些功...

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

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

0條評(píng)論

閱讀需要支付1元查看
<