重構 概念和壞味道 自己的理解

2022-02-01 21:17:09 字數 1927 閱讀 7633

在軟體開發中專案失敗是很正常的,大部分的專案都在延期的邊緣,但是為什麼會造成這樣的結果呢?

我們有很強的工程師,對專案管理也很完善,為什麼還會造成這樣的結果呢?

為什麼專案做到了一定的程度,客戶只要求乙個小的修改我們都會帶出來一大堆的問題呢?

一切的問題都在於你檢查過你寫的**了嗎?你對你的**重構了嗎?

最近翻開我的一本老書,這本書已經在我的書架上睡了快兩年了,當時買的時候看了部分開頭,學了一小部分

最近開始真的帶專案的時候使用了上面說的一部分方法後,才發現這本書真的很好,又一次翻開了.

從這篇文章開始,我會把我學到的,並且在專案中已經應用的重構方法寫出來.

什麼是重構?

重構就是當程式寫完後,進行的一種**整理的過程.重構實際上是一種在**寫好之後改進它的設計.

奇怪了為什麼不先設計好了再開發呢?我第一次看到重構的時候就有這種想法.最後得出的答案是,不管你

的**經驗和水平有多高,你沒有辦法再一開始就把專案設計的很完美.

在我這個專案開始的時候,**寫的很骯髒,錯誤的命名,多次的複製貼上**,高度的耦合,修改乙個地方

牽扯一堆地方.如果開始有好的設計,那麼這些問題都不會發生.那麼現在放下你手頭的事情對你的程式

進行重構吧.下面就開始正式的介紹重構的方法.

在開始之前大家要明確這樣的乙個詞,**的壞味道.那些**是有壞味道的呢?

(1)重複的**.

如果你在乙個以上的地點看到相同的程式結構,那麼可以肯定:設法將他們合二為一.

(2)過長的函式.

越短的函式會存活的時間更長,存活的更好.

(3)過長的類.

如果想利用單一的類做很多的事情,那麼該類的內部會出現很多的instance變數,重複**就要接踵而至了.

(4)過長的引數列.

太長的引數列難以理解,太多的引數會造成前後不一致,不易使用,一旦你需要更多的資料,就不得不修改它.

(5)發散式變化.

一旦我修改軟體,我希望只在一處修改就好,如果不能做到這點,該壞味道就出現了.\

(6)煙霧彈式修改.

一旦軟體進行修改,你必須去對多個類的內部做小修改,該壞味道出現了.

(7)依戀情結.

函式對某個類的興趣高過對自己所處之host類的興趣,壞味道出現了.`

(8)資料泥團.

兩個類中的相同值域,多個函式中的相同引數,該壞味道出現了.

(9)基本類別偏執.

如果乙個類只為了做一兩件事而建立,卻付出了太大的額外開銷,該壞味道出現了.

(10)switch驚悚現身.

盡量少用switch語句,因為switch語句的問題在於重複.

(11)平行繼承體系.

如果你發現某個繼承體系的類名稱字首和另乙個繼承的類名稱字首完全相同,壞味道出現了.

(12)冗贅類.

如果乙個類的所得不值其身價,消失吧.

(13)夸夸其談未來性.

(14)令人迷糊的暫時值域.

某個instance變數僅為某種特定情況而設定.

(15)過度耦合的訊息鏈.

(16)中間轉手人.

討厭的封裝,對外部世界隱藏其內容.

(17)狎暱關係.

兩個類過於親密,花費太多的時間去**彼此的似有成分.

(18)異曲同工的類.

如果兩個方法做同一件事,卻有不同的名字.

(19)不完美的程式類庫.

(20)純稚的資料類.

該類的特性是,擁有一些值域,一級用於訪問這些值域的函式,其他的一無所有.

(21)被拒絕的遺贈.

子類應該繼繼承父類的方法和資料,但是父類都寫成似有的,不希望子類繼承,壞味道出現了.

(22)過多的注釋.

你發現乙個類有很多的注釋,是因為這個類很爛,那麼這裡的注釋就是壞味道了.

ok所有的壞味道的條件都知道了,下篇文章開始介紹重構的方法.

**請註明

winnerzone

重構的概念和作用

重構 refactoring 就是在不改變軟體現有功能的基礎上,通過調整程式 改善軟體的質量 效能,使其程式的設計模式和架構更趨合理,提高軟體的擴充套件性和維護性。color red 重構的必要性 color 重構的重要性要從軟體的生命週期說起。軟體不同與普通的產品,他是一種智力產品,沒有具體的物理...

理解子網和CIDR的概念

1,ip位址分為5類,a,b,c,d,e,它們的字首分別是 答 0網路個數2 7,主機個數2 24,大概1千6百萬 b 10網路個數2 14,大概1萬6千,主機個數2 16,大概6萬5千 c 110網路個數2 21,大概2百萬,主機個數2 8,254個 d 1110用於多播編址 e 1111留作未來...

C 引用的理解和概念

引用變數是乙個別名,也就是說,它是某個已存在變數的另乙個名字。一旦把引用初始化為某個變數,就可以使用該引用名稱或變數名稱來指向變數。引用很容易與指標混淆,它們之間有三個主要的不同 試想變數名稱是變數附屬在記憶體位置中的標籤,您可以把引用當成是變數附屬在記憶體位置中的第二個標籤。因此,您可以通過原始變...