優雅程式設計之這樣組織資料,你就「正常」了(二十五)

2021-07-23 06:00:50 字數 2861 閱讀 7284

【馬雲有1500億。中國有13億人 他每人發一億 他還有1487億 這樣他還是中國首富 全中國都是億萬富豪。我要不是數學系的都看不出裡面的道道】

專案中如何重新組織資料???

以下來自《重構》這本書的讀書筆記,歡迎留下寶貴意見。

self encapsulate field(自封裝字段)

你直接訪問乙個字段,但與字段之間的耦合關係逐漸變得笨拙。為這個字段建立取值/設值函式,並且只以這些函式來訪問字段。

爭論:直接取值還是間接取值:作者的觀點是間接取值。

replace data value with object(以物件取代資料值)

你有乙個資料項,需要與其他資料和行為一起使用才有意義。將資料項變成物件。

change value to reference(將值物件改為引用物件)

你從乙個人類衍生出許多彼此相等的例項,希望將它們替換為同乙個物件。將這個值物件變成引用物件。

change reference to value(將引用物件改為值物件)

你有乙個引用物件,很小且不可變,而且不易管理,將它變成乙個值物件。

replace array with object(以物件取代陣列)

你有乙個陣列,其中的元素各自代表不同的東西。以物件替換陣列。對於陣列中的每乙個元素,以乙個欄位來表示。

重構前:

string gifts = new string[3];

gifts[0] = "flower";

gifts[1] = "say love";

gifts[2] = "call";

重構後:

gift gift = new gift();

gift.setflower(999);

gift.setsayword("love you");

gift.setcall("good night");

change unidirectional association to bidirectional(將單向關聯改為雙向關聯)兩個類都需要使用對方特性,但其間只有一條單線連線,新增乙個反向指標,並修改函式,使能夠同時更新兩條連線。

//兩人彼此相愛時,心裡都有對方

class boy

class girl

change bidirectional association to unidiredtional(將雙向關聯改為單向關聯)兩個類之間有雙向關聯,但其中乙個類如今不再需要另乙個類的特性。去除雙向關聯。

//女孩不喜歡男孩了

class boy

class girl

replace magic number with symbolic constant(以字面常量取代魔法數)你有乙個字面數值,帶有特別含義。創造乙個殘聯,根據其意義為它命名,並將上述的字面數值替換為這個常量。

重構前

public boolean testlove()
重構後

//這裡的常量要放在離函式近的地方

public static int days = 999;

public boolean testlove()

encapsulate field(封裝字段)你的類中存在乙個public欄位,將它宣告為private,並提供相應的訪問函式。(就是我們所說的set,get方法)

重構前

private string flowernum
重構後

private string flowernumber;

public string getflowernumber()

public void setflowernumber(string flowernumber)

encapsulate collection(封裝集合)有個函式返回乙個集合,讓這個函式返回該集合的乙個唯讀副本,並在這個類中提供新增/移除集合元素的函式。(具體可以看書本例子)

replace type code with class(以類取代型別碼)

類之中有乙個數值型別碼,但它並不影響類的行為,以乙個新的類替換該數值型別碼。(具體可以看書本例子)

replac type code with subclasses(以子類取代型別碼)

你有乙個不可變的型別碼,它會影響類的行為,以子類取代這個型別碼。(具體可以看書本例子)

replace type code with state/strategy(以state/strategy)取代型別碼

你有乙個型別碼,它會影響類的行為,但你無法通過繼承手法消除它,以狀態物件取代型別碼。(具體可以看書本例子)

replace subclass with fields(以欄位取代子類)

你的各個子類的唯一差別只在,」返回產量資料」的函式身上。修改這些函式,使它們返回超類中的某個新增字段,然後銷毀之類。(具體可以看書本例子)

來自亦舒《花解語》

優雅程式設計之這樣處理邊界,你就「正常」了!

貓和狗結婚,不久鬧離婚。法官問原因,狗說 貓婚後每晚都不回家,行為不軌。貓大喊 冤枉啊,我只是去追老鼠。狗說 法官你聽聽。如何優雅處理與第三方api的邊界問題?1 學習性測試 在專案中引入第三方api的新版本,測試專案是否正常工作,當然我們基本上沒有時間去重頭學習和研究第三方工具或者自己寫 來實現第...

優雅程式設計之這樣注重實效,你就「正常」了(十二)

專案開發過程中,注重實效的途徑?下面是來自 程式設計師修煉之道 中,自己的一些總結 重複的危害 系統中的每一項知識都必須具有單一,無歧視,權威的表示。不要重複你自己 重複是怎樣發生的 讓復用變得更容易 正交性 正交性 從幾何學中借來的術語,如果兩條直線相交成直角,他們就是正交的。兩個事物中乙個發生變...

優雅程式設計之專案注意這些,你就「正常」了(十七)

今天被公司開除了 好難過 事情的起因是我覺得很冤枉的 昨天領導發通知說 明早8 00開會 帶好你們吃飯的傢伙在辦公室集合。結果到辦公室一看 懵逼了!同事們都帶著膝上型電腦 我特麼拿了個碗 茄子甲 大家一起照張合影吧!眾茄子 好啊,好啊!茄子甲 我喊一二三大家一起喊 人類!乙隻茄子好奇地問 為什麼要喊...