大道化簡,重構的藝術

2021-09-08 15:31:53 字數 1148 閱讀 1952

這個題目貌似很大,有成為標題黨人的嫌疑。其實我想說的是一些小事,就是我小時候經常去小渠裡抓魚。而抓魚的方式也很簡單,就是拿磚塊,泥巴把小渠的兩頭堵起來,然後把中間的水舀出去。

軟體為什麼要重構?那是因為你感覺不夠好。之所以感覺不夠好,原因可能會很多。我想,最嚴重的乙個可能就是設計混亂。設計混亂牽扯的方面很多,有依賴上的,有呼叫上的。也有根本實現不了目的,或者很難擴充套件。有很多人重構時候乾脆就是把**重寫一遍,這種方式固然是好,但是成本太高。有時候無法接受重新梳理一遍**的工作週期。

如何漸進地進行重構不得不擺在我們面前,而我沒有珍惜,等............

對於依賴關係錯誤的重構是最為複雜的。這個複雜表現在必須重新理順依賴關係,然後得出解決的方案。而**呼叫讓人頭疼的地方,我想主要在於,沒有重用和過度重用兩種。擴充套件上的問題需要重新梳理業務規則,才能制定方案。

毛病很多,頭疼醫頭,腳疼醫腳,還真是麻煩。其實最根本的方法還在於學會養生,修煉內功。但路總要一條一條走,飯要一口一口吃啊。遇到這麼多複雜的問題,還需要化繁為簡。這裡的化繁為簡在我看來和我小時候抓魚差不多,需要能夠對大量的工作進行截斷,乙個階段乙個階段地進行重構。這樣才能達成漸進的重構目的。

如何進行工作量的切斷,方法很多,但是有個根本的思想在於理清依賴。比如,類b呼叫了類a,那麼b就對a產生了依賴。現在需要對a進行調整,那麼就有很大可能對b的正常執行產生影響。如何能隔離b和a,這就需要給a定義規範。這也就是對a進行抽象,提煉出介面ia,那麼不管你a怎麼變,你符合ia介面的話,就可以給b使用。ia就像我抓魚時候築的那條小壩,雖然很小,卻很能解決問題。

為什麼這樣可以解決問題?這就在於,任何乙個消費者不會需要知道生產者的一切東西。那麼只要把消費者需要的東西拿到就可以。mvc,mvp,三層架構都是大壩,是水渠的兩邊。而大半框架都是進行水平的劃分,垂直的劃分一般是以業務來劃分。所以,如果軟體已經實現了水平的劃分,重構起來要輕鬆很多。那樣只需要對業務的垂直劃分進行逐步的改造。而如果水平劃分沒有做,那就慘了,理清頭緒都不是件容易的事情。

事實上,重構遠沒有上面描述的那麼簡單。比如,以前專案中一直使用extjs進行介面的開發,現在想減小js的比重,因此想改用jquery+html+css來替換ext的控制項,那改造起來也是很複雜的事情。一次性全部更新的代價很高,出錯機會很大,並且不容易形成規範。需要像國家改革一樣形成試點,逐步推廣。從這裡也可以看出,重構不一定是oo的重構,除非你達到了一切皆是oo的境界。

重構 程式猿的藝術

重構 在不改變軟體對外表現和行為的前提下修改已有 使其易於理解,便於擴充套件 重構就是讓 易於程式猿理解。在重構的世界裡 是寫給程式猿看的而非寫給機器看,我們會忽視效能而專注於讓 對程式猿更友好 先讓 跑通,再去重構,最後才考慮效能優化 重複一遍 重構時機 好處新增功能前 更易擴充套件 改bug前 ...

一次成功的重構實踐3 抽象的藝術

黃國強 2019 2 7 抽象能力的培養非常重要。所謂抽象即抓住事物的本質規律,透過現象看本質。乙個程式設計師工作多年,寫 的技術都會掌握。但是如果想做架構,缺乏抽象能力是不行的。這就好比工匠和藝術家,前者只能做到是技藝純熟,不斷重複自己。藝術家往往可以表達人類普遍情感,探索客觀世界的規律。比如,物...

分式化簡結果要求 分式化簡的結果有什麼要求?

分式的化簡與求值 分式的有關概念和性質與分數相類似,例如,分式的分母的值不能是零,即分式只有在分母不等於零時才有意義 也像分數一樣,分式的分子與分母都乘以 或除以 同乙個不等於零的整式,分式的值不變,這一性質是分式運算中通分和約分的理論根據。在分式運算中,主要是通過約分和通分來化簡分式,從而對分式進...