重構下載功能模塊

背景

最近項目新上線的版本中,出現了很多涉及下載相關的bug;經過艱難的代碼調試排查,可還是沒有準確定位問題。主要還是由於代碼年久,經過多代人的修修補補,到處都是“壞味道”的代碼。跟項目經理溝通過後,同意重構這部分的代碼。下面就簡單記錄一下重構的過程。

項目現狀

項目最早可追溯至2014~2015年,分為配置管理網站(Server),WPF桌面軟件(Client)。桌面軟件又分為:用戶操作界面WPF,後台服務 Windows Services 程序。
在後端Services中,維護一個本地的小型Firebird數據庫,為WPF提供數據和用戶狀態保持;實現了從遠程服務器同步數據到本地,訪問遠程接口,下載管理,數據上報等功能。而我這次要做的就是,重寫下載管理。下面是關於舊代碼的分析:

  1. 三種不同的下載觸發機制:軟件啟動觸發、用戶觸發,數據同步到本地觸發;
  2. 有八種不同的資源下載,分別在不同的表中管理;
  3. 有五套複製粘貼的代碼:軟件啟動(兩套)、用戶觸發(兩套)、數據同步(一套);
  4. 大量無意義嘗試,比如下載失敗404后,短時間內沒有必要再次嘗試;
  5. 狀態管理不統一,有的下載完成狀態改為 ReadyForUse,有的下載完成狀態改為 DownloadSuccess;
  6. 執行方法語義重疊,比如 DownloadPause 和 DownloadStop,DownloadFinished 和 DownloadSuccess;
  7. 大段註釋代碼,這些代碼基本永遠不會再使用的;

重構設計

鑒於項目是在運行階段,一方面要考慮時間成本,另一方面要保證原有的運行方式。在當前軟件的框架下,把重寫的代碼限定在下載模塊內部,對外的接口不做改變。
重構代碼的抽象和設計,也是依據當前項目的實際情況,盡可能的通用和易擴展。設計的UML類圖如下:

下面的三個虛類,是下載管理流程的核心,所有的控制邏輯都包含在其中。

  1. DownloadResourceAbstract 虛類 資源文件的基本信息: DatabaseID 和 ResourceID為了兼容不同數據庫表的設計;DownloadPriority 預設優先級;DownloadImmediatelyPriority 用戶觸發的下載,優先級最高,立即執行;其它字段涵義可見字段名稱;
  2. DownloadWorkItemAbstract 虛類 資源下載操作類,包含下載狀態,開始,停止,MD5檢查,狀態更改的回調方法;與①一對一關係;
  3. DownloadControlerAbstract 虛類 控制同時下載的數量,根據優先級控制下載的順序;與②一對多關係

下面的類,是具體下載方法的實現;當前的項目只有HTTP下載,類圖中也只實現了HTTP的下載的管理功能:

  • 可擴展下載方法設計:FtpClient、HttpClient繼承自DownloadClientAbstract;
  • 關聯 HTTP 下載,分別實現的子類 HttpDownloadWorkItem 和 HttpDownloadControler;

對不同類型的資源文件,組合不同的下載方式:

  • AutoHttpDownloadDealer: 自動下載的資源 + HTTP 下載;
  • UserOperHttpDownloadDealer: 用戶手動操作的資源 + HTTP 下載;
  • 由數據同步到本地的觸發下載資源 + HTTP下載;(未在UML圖中畫出)

發現bug的真實原因

在重構測試階段,意外發現了bug的原因:前段時間更換了文件服務器,而新的文件服務器,不支持斷點續傳,HTTP Status 返回的不是預期的Partial Content(206),而是OK(200);下載文件不存在時,HTTP Status 返回的也不是 404,而返回自定義的 Response Text 。。。

由於這兩個不合理的地方,導致軟件的下載功能,出了好多莫名其妙的bug,再疊加到處複製 + 粘貼“壞味道”的代碼,修復起來異常繁瑣,於是就有了重構這件事情。

個人感受

在當前的項目中,也做了幾次小範圍的重構,要麼代碼影響範圍小,要麼只是在原代碼基礎上套個框架。而這次是徹底幹掉原代碼,重新設計,重新寫。下面是代碼重寫完成后 git merge 的 log:

Showing 1107 revision(s), from revision 6092a531 to revision f336c077 – 1 revision(s) selected, 166 file(s) selected; line: 5226(+) 5251(-) files: modified = 118 added = 28 deleted = 20 replaced = 0

從上面的log匯總信息,好像也不足以展示修改工作量。這些修改大約花費了我一周的時間,自願工作日加班,自願周末加班(有時候代碼寫上頭了,還得強迫自己下班休息去)。開始的前三天的時間,邊讀舊代碼,邊搭建新的框架,嘗試把舊代碼融入到新設計中;後期轉換思路,理解代碼邏輯,把代碼邏輯融入到新設計中。

這樣就可以放開手腳的干起來了,寫代碼的時候,感覺時間過的好快,如有神助般各種代碼中的細節,也會不假思索的寫出來。在下階段單元測試中,非常順滑,基本沒有發現什麼bug,真的是酣暢淋漓。

最最讓我寒心的是,好不容易重構測試完代碼了,壓抑着無比激動的心情,希望組裡的同事給個积極肯定的反饋,可連一個“卧槽”也沒有,就行往常平淡的工作日。。。項目經理也是很淡然的說,要儘快拿給測試。

尾聲

即使我的努力和心血沒有得到,預期中的肯定,我也要把這個過程留存記錄下來:把重構的代碼剔除項目信息,再提取合併通用的部分,重新梳理成一個類庫Github 地址;寫一篇文章來記錄一下。

其實,後面我細細回想了一下。如果最開始項目設計的下載功能是,把所有下載資源放在同一張數據庫表中管理,是不是就那不就更簡單了?如果最最早期的設計做好了,後期可以省掉多少功能擴展、修復bug、重構。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※超省錢租車方案

※別再煩惱如何寫文案,掌握八大原則!

※回頭車貨運收費標準

※教你寫出一流的銷售文案?

Tesla 解決大陸商標爭議、Model X 行情看俏

電動車製造商特斯拉 (Tesla ) 6 日宣佈,該公司已和在大陸搶先註冊商標的商人占寶生 (Zhan Baosheng) 敲定協議,雙方化解了商標爭議。占寶生也會轉交他在大陸註冊的網站名稱,當中包括「tesla.cn」、「teslamotors.cn」。   特斯拉表示,占寶生已同意讓大陸主管機關註銷他先前註冊或申請的商標,而且完全不向特斯拉收費。   MarketWatch 則指出,特斯拉計畫推出的電動休旅車 (SUV)「Model X」,很有機會比電動轎車「Model S」更受歡迎。特斯拉目前首度暫停旗下唯一一座組裝廠,以重整產品線加快 Model S 的出貨速度、同時也為生產次世代電動休旅車「Model X」預做準備。  

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】

※USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

※台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※幫你省時又省力,新北清潔一流服務好口碑

※回頭車貨運收費標準

人糞變肥料 混雜8萬種化學物質 美國掀起再利用論戰

環境資訊中心綜合外電;姜唯 編譯;林大利 審校

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※教你寫出一流的銷售文案?

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※回頭車貨運收費標準

※別再煩惱如何寫文案,掌握八大原則!

※超省錢租車方案

比亞迪上半年新能源車銷量增6倍 利潤仍降逾6成

比亞迪(BYD)今日發佈半年度報告,上半年營業收入約1301.1億新臺幣,同比增長2.59%;淨利潤約17.6億新臺幣,同比下降15.52%,低於市場預期的21.2億元;每股淨收益0.73元,同比減少15.88%。其上半年新能源汽車銷量同比增長6倍,銷售額達約131.5億元;預計1~9月將實現淨利潤17.6-20億元,按年降幅11.7%至22.45%;另外其下半年將會有插電式混合動力SUV「唐」和純電動轎車「騰勢」上市。   以季績看,比亞迪今年第二季的表現其實比去年同期略佳,今年次季純利約17億,比去年同期的15.3億元有近11%增幅;然而,公司上半年17.6億的利潤,當中逾九成來自政府補貼,達到16億。此外,若以其盈警所評估今年首三季盈利計算,則比亞迪第三季可能只有最多2.44億利潤,或最壞情況會出現輕微虧損。   比亞迪汽車業務收入同比下降7.45%至約616億新臺幣,銷量同比下降約27%至約18萬輛,不過SUV車型S6的銷售卻同比上升約30.2%。目前其1.6GWH鐵電池產能已難以滿足今年的新能源汽車需求。公司預計隨著下半年新的電池產能的投放,協調各方資源完善充電設施網路,新能源汽車銷量及份額還將持續提升。   中國汽車工業協會資料顯示,2014年上半年,比亞迪新能源汽車市場份額達37%,其中插電式混合動力市場份額超過60%;插電式混合動力車型“秦”成為中國新能源汽車銷量冠軍。公共交通領域,比亞迪已於南京、天津、杭州、大連等多個城市贏得訂單,並陸續出貨。另外,K9電動大巴已在歐洲、北美、南美、亞洲的海外多個國家和地區通過試運營。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

※南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

※教你寫出一流的銷售文案?

※超省錢租車方案

瑞銀:太陽能助攻 電動車將成新寵兒

瑞銀 (UBS) 認為,太陽能和電池成本逐漸下滑,2020 年電動車將成歐洲大眾車市的平價選擇,而且比汽油車更划算。   CNBC 27 日報導,瑞銀報告表示,歐洲國家特別是德國、義大利、西班牙燃料費高、零售電價昂貴,將引領電動車潮流。瑞銀「保守」估計,2025 年歐洲 10% 新車會是電動車。該行預估,2020 年多數電動車訂價會與汽油車相近,不過電動車每年可另外省下 2,000 歐元的油錢,等於現買現賺。   瑞銀稱,目前電動車的市占率僅有 0.25%,2012 年全球售出 11.3 萬輛電動車,2025 年有望增至 500 萬輛。   瑞銀認為,太陽能發展會讓電動車更加誘人;估計 2020 年電池成本將減少 50% 以上,太陽能板價格也會大跌 85%,家庭電力儲存系統將廣受歡迎,搭配電動車具有加乘效果。要是民眾認為,電動車和汽油引擎車達到真正成本平價 (cost parity),會帶動換車潮,而且購買自家發電設備也能降低電費支出。這三者交互作用,將使太陽能極具競爭力,有潛力造成破壞性改變。  

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※超省錢租車方案

※別再煩惱如何寫文案,掌握八大原則!

※回頭車貨運收費標準

※教你寫出一流的銷售文案?

F-立凱進攻大陸市場 搶兆元商機

台灣電動巴士龍頭潤泰集團F-立凱繼攜手德國西門子馬達,及與日本索尼 (SONY) 合作後,於 2 日在浙江省寧波市的余姚落戶,搶攻全球每年在電動車與儲能系統領域的台幣兆元商機。   F-立凱表示,未來將以電動公車搭載德國西門子馬達與大陸車體廠合作,打造余姚市區公車,正式進軍大陸市場。   此外,今年 7 月兩岸綠色產業論壇中,F-立凱與龍華汽車簽訂合作意向書,由立凱研發結合黑龍江最大汽車廠,生產電動巴士,搶占全球綠能商機。   F-立凱表示,現有材料事業部,擁有完整的全球專利佈局,受惠中國新能源政策及 4G 基地台建置需求,鋰鐵材料被大量應用電動公車及基地台儲能系統,自 7 月營收動能轉強,可望一路走揚到年底。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

※南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

※教你寫出一流的銷售文案?

※超省錢租車方案

Tesla 預計 3 年內推部分自動駕駛技術

美國電動車大廠 Tesla 執行長穆斯克(Elon Musk)表示,該公司打算開發自動駕駛系統,部分技術目標 3 年內推出,而穆斯克也說,不排除再和豐田繼續合作,雖然雙方上次合作的結果初步來看並不太理想。

Tesla 在日本的第一部 Model S 電動車於 8 日交車,同日穆斯克在東京表示,全自動駕駛的技術,或許會在 5 到 6 年內實現。Tesla 會自行開發整套系統和軟體,但仍會使用其他廠商的感應器和零組件。

Tesla 打算把部分自動駕駛的新技術,運用在 3 年後即將推出的新款車輛上,每輛車售價大約為 3.5 萬美元。

穆斯克也說,打算加強與豐田汽車和 Panasonic 等日本公司的合作關係,一起推廣電動車。
 

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※超省錢租車方案

※別再煩惱如何寫文案,掌握八大原則!

※回頭車貨運收費標準

※教你寫出一流的銷售文案?

加州政府大力扶持 電動車銷量衝破 10 萬

美國加州電動車銷量突破 10 萬輛,在全美電動車交易中,加州占約 40 %。業界指出,銷量增加的主要原因是充電站數量遽增,加上電動車製造商引進更多車款,吸引更多消費者購買。   加州政府希望 2025 年前,電動車數目可達 150 萬輛。目前在美購買電動車的車主可申請聯邦退款 7500 美元,而加州的車主還可另外再獲退款 2500 美元,並享有使用高使用量車道的特權。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

※南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

※教你寫出一流的銷售文案?

※超省錢租車方案

特斯拉第 4 季欲達標 中國業務得有爆炸性成長

美國電動車製造商特斯拉 (Tesla) 成長動能逐漸趨緩,分析師警告,該公司的亞洲業務,尤其是中國大陸得再加把勁,否則恐難達成 2014 年預設的銷售目標。   barron`.com、ValueWalk 17 日報導,巴克萊 (Barclays) 證券分析師 Brian A. Johnson 發表研究報告指出,特斯拉在達成第 4 季的銷售目標 13,000 台恐怕有些困難,即使北美提高出貨量、歐洲有些許成長,亞洲地區也得出貨 5,700 至 6,300 台才能達成目標。   Johnson 認為,特斯拉的北美銷售量已經來到平原區,雖然該公司在當地的出貨量會在本季拉高、以便滿足在 Q2 下單客戶的需求,但仍不如 2013 年每季平均 4,500 至 5,000 台的出貨量。另外,他認為大陸本季的 Model S 出貨量僅將達 2,000 至 2,200 台。   Johnson 認為,特斯拉的動能已經不如以往,因此大陸若沒有爆發性成長,則恐怕在 Q4 衝擊股價。  

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※超省錢租車方案

※別再煩惱如何寫文案,掌握八大原則!

※回頭車貨運收費標準

※教你寫出一流的銷售文案?

轉銷商囤貨致民眾難買?Switch 日本二手價較新品高 1 成

任天堂(Nintento)日前雖稱 Switch 遊戲機生產將在近期內恢復正常,不過因宅需求夯,遊戲機持續維持高人氣,加上疑似有轉銷商囤貨,導致一般民眾依舊難於買到 Switch,讓 Switch 日本二手價當前仍較新品價高出 1 成。

日經新聞 14 日報導,任天堂雖曾在 6 月時稱 Switch 遊戲機生產將在近期內恢復正常,不過因宅需求夯,提振遊戲機產品持續維持高人氣,加上疑似有以高價轉賣為目的的「轉銷商」囤貨,導致 Switch 在日本市場上依舊難入手,目前二手價(網拍價)仍較新品價高出約 1 成。

在調查營運網拍比較網站 aucfan 的價格行情後得知,7 月份 Switch 平均網拍成交價為 35,699 日圓,和 4 月時的高點相比雖大幅便宜了 3 成,不過仍高於新品的希望零售價格(32,978 日圓)。

報導指出,仍有眾多消費者表示,「買不到 Switch」;日本國內分析師表示,「以高價轉賣為目的的『轉銷商』囤貨,讓一般消費者難於買到 Switch」,預估二手價要回復正常水準仍需時間。

任天堂 14 日上漲 0.23%,收 51,320 日圓;今年迄今股價累計大漲 16.7%,表現遠優於東證一部指數(TOPIX)同期間的下挫 5.69%。

新聞來源:https://ccc.technews.tw/2020/08/17/japan-used-switch-is-10-percent-higher-than-new-product/

【其他文章推薦】

※超省錢租車方案

※別再煩惱如何寫文案,掌握八大原則!

※回頭車貨運收費標準

※教你寫出一流的銷售文案?