什麼是軟體反模式?
Posted: Sun Dec 15, 2024 6:07 am
軟體設計模式是一種有效的、可重複使用的解決方案,可應用於軟體程式設計中常見的問題。所以軟體反模式與此相反,對嗎?
嗯,有點像。
與設計模式完全相反,軟體反模式將用於確保專案失敗。軟體開發人員不太可能故意插入已知會導致問題的反模式。
反模式最終可能會出現在軟體中,因為它們包含看起來適合解決特定問題的選項和選擇。反模式通常是一種晦澀或笨拙的解決方案,可能在短期內對您有用,但從長遠來看,它可能會導致超過短期收益的麻煩和後果。
在本文中,我們將描述幾種反模式,解釋它們的原因,並概述避免它們的步驟。
不同類型的軟體反模式
以下軟體反模式可能會為您的軟體開發專案帶來技術債。您的團隊 新加波电话号码 最終將不得不返回並修復程式碼,這可能會使專案進度面臨風險。
以下是您應該避免的一些常見反模式。
義大利麵代碼
如果有人告訴你你寫了很好的意大利麵條式程式碼,這並不是一種恭維。他們告訴你,你的程式碼有相同的「乾淨的邏輯結構,就像一盤義大利麵」(Richard Conway,1978)。
當開發人員在沒有過多考慮程式應如何流動的情況下就開始編碼時,可能會出現義大利麵條式程式碼。成品可能會如預期運作,但以後可能會出現問題,因為結構和流程不被理解。
隨著新程式碼的新增以及舊程式碼被複製並貼上到新區域,您先前執行的程式會演變成隨機放置的檔案、資料夾和函數的混亂狀態。在不破壞某些東西的情況下添加新東西幾乎是不可能的。弄清楚義大利麵條程式碼就像追蹤盤子上的每一根義大利麵條從一端到另一端一樣困難。
這有點像在現有建築物上增加一個新房間。如果不考慮現有建築的架構、材料、配色方案、設計和流程,您就不會開始使用隨機材料來建造。隨機的方法可能會導致房間與現有建築物發生衝突,並且看起來不屬於這裡。
金鎚子
在心理學中,認知偏誤是指一個人根據自己的信念和經驗對周遭世界的理解。金鎚子是一種認知偏見,它基於這樣的信念:單一工具可以用來解決所有程式設計問題。您使用了一段特定的、設計良好且架構合理的程式碼來解決先前專案中的問題。它肯定會再次適用於您當前的項目,對嗎?
並非總是如此。
我們的想法是,您不應該過度依賴一種解決方案,因為一種方法永遠無法真正適合所有人。在我們的房間添加範例中,錘子是一個非常有用的工具,但是您會嘗試用它來鋸一塊木頭嗎?
您也許可以將金鎚子反模式強制應用到不太適合的編碼中,甚至可以讓它工作,但是當您稍後添加新功能時,您的程序可能會變得不可靠和不穩定。如果你不小心,你可能會得到另一盤義大利麵式的程式碼。
船錨
當有人在程式碼庫中留下一段程式碼時,船錨反模式就會發生,不是因為它屬於那裡,而是因為以後可能需要它。原因是當以後需要程式碼時,可以輕鬆地將其打開並運行。它不會被打開,那麼它會造成什麼樣的傷害呢?
就像船錨一樣,這種類型的反模式會拖累您的專案並阻礙其快速前進。開發人員可能會陷入閱讀並嘗試調試在本次迭代中甚至不會打開的程式碼的過程中。所有這些額外的、不需要的程式碼都會使程式碼庫膨脹並減慢建置時間。如果您無意中打開了這些船錨反模式中的一個或多個,則可能會導致問題,例如破壞建造並增加技術風險或債務。
死程式碼
死代碼是原始程式碼中可能被執行但其結果不被程式使用的任何部分。該程式碼是不必要的並且浪費處理資源。
例如,許多年前,一位技術作家正在致力於記錄網路軟體拋出的錯誤代碼的解決方案。他驚訝地發現很多程式設計師都不知道:
錯誤代碼的含義
為什麼伺服器會拋出錯誤
哪一段程式碼觸發了這些錯誤
該程式碼基本上已經死了,需要刪除。但工程師不願意刪除它,因為他們擔心它會引入新的錯誤或破壞程式碼。
死程式碼反模式很重,對程式沒有任何作用,減慢開發速度,增加建置時間,而且難以維護。
神物
當你有一個物件或類別做太多事情並負責太多事情時,它可能被認為是上帝對象。分配過多的責任違反了物件導向設計的單一責任原則。程式碼中的每個物件和類別都應該負責軟體功能的一個部分。
例如,負責使用者 ID、名字、姓氏、要購買的商品清單、花費總額、交易 ID 等的客戶 ID 物件可能是上帝物件。客戶 ID 物件處理使用者 ID、名字和姓氏是有意義的,但請嘗試透過建立單獨的物件來處理交易詳細資訊來分離和模組化程式碼。
複製及貼上編程
有時,將其他來源的程式碼複製並貼上到您的程式碼中可能會導致意外的問題。僅僅因為這些程式碼範例適用於其他開發人員解決與您類似的問題,並不意味著它們可以簡單地放入您的程式碼中並順利工作。
如果您測試程式碼並確保它可以工作,並且可以與您的專案架構配合使用,那麼您可能需要繼續在程式碼中使用它。另一方面,如果您不對其進行測試並添加它,因為它對其他人有效,那麼您將面臨引入錯誤和其他問題的風險。解決此問題的唯一方法是尋找並刪除貼上程式碼的每個實例。或者,您可以還原到引入複製和貼上的反模式之前的軟體版本。
透過更好的系統管理避免軟體反模式
您可以透過在管理系統時更加一致和警惕來避免在程式碼庫中添加反模式。具體來說,您應該:
進行頻繁的程式碼審查:就像作家需要編輯來審查他們的工作中的拼字錯誤和語法錯誤一樣,軟體開發人員也需要程式碼審查來尋找和修復語法錯誤、缺陷、提高程式碼品質以及找到常見問題的更好解決方案。讓另一雙眼睛審視你的工作總是很重要的,因為他們會注意到你錯過的事情,這將幫助你收緊程式碼。
嗯,有點像。
與設計模式完全相反,軟體反模式將用於確保專案失敗。軟體開發人員不太可能故意插入已知會導致問題的反模式。
反模式最終可能會出現在軟體中,因為它們包含看起來適合解決特定問題的選項和選擇。反模式通常是一種晦澀或笨拙的解決方案,可能在短期內對您有用,但從長遠來看,它可能會導致超過短期收益的麻煩和後果。
在本文中,我們將描述幾種反模式,解釋它們的原因,並概述避免它們的步驟。
不同類型的軟體反模式
以下軟體反模式可能會為您的軟體開發專案帶來技術債。您的團隊 新加波电话号码 最終將不得不返回並修復程式碼,這可能會使專案進度面臨風險。
以下是您應該避免的一些常見反模式。
義大利麵代碼
如果有人告訴你你寫了很好的意大利麵條式程式碼,這並不是一種恭維。他們告訴你,你的程式碼有相同的「乾淨的邏輯結構,就像一盤義大利麵」(Richard Conway,1978)。
當開發人員在沒有過多考慮程式應如何流動的情況下就開始編碼時,可能會出現義大利麵條式程式碼。成品可能會如預期運作,但以後可能會出現問題,因為結構和流程不被理解。
隨著新程式碼的新增以及舊程式碼被複製並貼上到新區域,您先前執行的程式會演變成隨機放置的檔案、資料夾和函數的混亂狀態。在不破壞某些東西的情況下添加新東西幾乎是不可能的。弄清楚義大利麵條程式碼就像追蹤盤子上的每一根義大利麵條從一端到另一端一樣困難。
這有點像在現有建築物上增加一個新房間。如果不考慮現有建築的架構、材料、配色方案、設計和流程,您就不會開始使用隨機材料來建造。隨機的方法可能會導致房間與現有建築物發生衝突,並且看起來不屬於這裡。
金鎚子
在心理學中,認知偏誤是指一個人根據自己的信念和經驗對周遭世界的理解。金鎚子是一種認知偏見,它基於這樣的信念:單一工具可以用來解決所有程式設計問題。您使用了一段特定的、設計良好且架構合理的程式碼來解決先前專案中的問題。它肯定會再次適用於您當前的項目,對嗎?
並非總是如此。
我們的想法是,您不應該過度依賴一種解決方案,因為一種方法永遠無法真正適合所有人。在我們的房間添加範例中,錘子是一個非常有用的工具,但是您會嘗試用它來鋸一塊木頭嗎?
您也許可以將金鎚子反模式強制應用到不太適合的編碼中,甚至可以讓它工作,但是當您稍後添加新功能時,您的程序可能會變得不可靠和不穩定。如果你不小心,你可能會得到另一盤義大利麵式的程式碼。
船錨
當有人在程式碼庫中留下一段程式碼時,船錨反模式就會發生,不是因為它屬於那裡,而是因為以後可能需要它。原因是當以後需要程式碼時,可以輕鬆地將其打開並運行。它不會被打開,那麼它會造成什麼樣的傷害呢?
就像船錨一樣,這種類型的反模式會拖累您的專案並阻礙其快速前進。開發人員可能會陷入閱讀並嘗試調試在本次迭代中甚至不會打開的程式碼的過程中。所有這些額外的、不需要的程式碼都會使程式碼庫膨脹並減慢建置時間。如果您無意中打開了這些船錨反模式中的一個或多個,則可能會導致問題,例如破壞建造並增加技術風險或債務。
死程式碼
死代碼是原始程式碼中可能被執行但其結果不被程式使用的任何部分。該程式碼是不必要的並且浪費處理資源。
例如,許多年前,一位技術作家正在致力於記錄網路軟體拋出的錯誤代碼的解決方案。他驚訝地發現很多程式設計師都不知道:
錯誤代碼的含義
為什麼伺服器會拋出錯誤
哪一段程式碼觸發了這些錯誤
該程式碼基本上已經死了,需要刪除。但工程師不願意刪除它,因為他們擔心它會引入新的錯誤或破壞程式碼。
死程式碼反模式很重,對程式沒有任何作用,減慢開發速度,增加建置時間,而且難以維護。
神物
當你有一個物件或類別做太多事情並負責太多事情時,它可能被認為是上帝對象。分配過多的責任違反了物件導向設計的單一責任原則。程式碼中的每個物件和類別都應該負責軟體功能的一個部分。
例如,負責使用者 ID、名字、姓氏、要購買的商品清單、花費總額、交易 ID 等的客戶 ID 物件可能是上帝物件。客戶 ID 物件處理使用者 ID、名字和姓氏是有意義的,但請嘗試透過建立單獨的物件來處理交易詳細資訊來分離和模組化程式碼。
複製及貼上編程
有時,將其他來源的程式碼複製並貼上到您的程式碼中可能會導致意外的問題。僅僅因為這些程式碼範例適用於其他開發人員解決與您類似的問題,並不意味著它們可以簡單地放入您的程式碼中並順利工作。
如果您測試程式碼並確保它可以工作,並且可以與您的專案架構配合使用,那麼您可能需要繼續在程式碼中使用它。另一方面,如果您不對其進行測試並添加它,因為它對其他人有效,那麼您將面臨引入錯誤和其他問題的風險。解決此問題的唯一方法是尋找並刪除貼上程式碼的每個實例。或者,您可以還原到引入複製和貼上的反模式之前的軟體版本。
透過更好的系統管理避免軟體反模式
您可以透過在管理系統時更加一致和警惕來避免在程式碼庫中添加反模式。具體來說,您應該:
進行頻繁的程式碼審查:就像作家需要編輯來審查他們的工作中的拼字錯誤和語法錯誤一樣,軟體開發人員也需要程式碼審查來尋找和修復語法錯誤、缺陷、提高程式碼品質以及找到常見問題的更好解決方案。讓另一雙眼睛審視你的工作總是很重要的,因為他們會注意到你錯過的事情,這將幫助你收緊程式碼。