首頁 後端開發 php教程 程式設計師共同開發網 程式設計師程式設計十條戒律

程式設計師共同開發網 程式設計師程式設計十條戒律

Jul 29, 2016 am 08:40 AM

1.- DRY: Don't repeat yourself.
DRY 是一個最簡單的法則,也是最容易被理解的。但它也可能是最難被應用的(因為要做到這樣,我們需要在泛型設計上做相當的努力,這並不是一件容易的事)。它意味著,當我們在兩個或多個地方的時候發現一些相似的代碼的時候,我們需要把他們的共性抽像出來形一個唯一的新方法,並且改變現有的地方的代碼讓他們以一些合適的參數呼叫這個新的方法。
DRY 這法則可能是程式設計屆中最通用的法則了,目前為止,應該沒有哪個程式設計師對這法則存有異議。但是,我們卻能發現,一些程式在編寫單元測試(unit testing)時忘記了這一法則:讓我們相像一下,當你改變一個類的若干接口,如果你沒有使用DRY,那麼,那些通過調用一系例類別的介面的unit test的程序,都需要被手動的更改。例如:如果你的unit test的諸多test cases中沒有使用一個標準共有的建構類別的方法,而是每個test case自己去建構類別的實例,那麼,當類別的建構子被改變時,你需要修改多少個test cases啊。這就是不使用DRY法則所帶來的惡果。
2.- 短小的方法.
至少,我們有以下三個不錯的理由要求程式設計師寫下短小的方法。
程式碼會變得更容易閱讀。
程式碼會變得更容易重複使用(短方法可以減少程式碼間的耦合程度)
程式碼會變得更容易測試。
3.- 良好的命名規範
使用不錯的統一的命名規範可以讓你的程序變得更容易閱讀和維護,當一個類,一個函數,一個變量的名字達到了那種可以“望文生義」的境界話,我們就可以少一些文檔,少一些溝通。文章《程式設計中的命名設計那點事 》可以給你一些提示。
4.- 賦予每個類正確的職責
一個類,一個職責,這類規則可以參考一下類的SOLID 法則。但我們這裡強調的不是單一的職責,而是一個正確的職責。如果你有一個類別叫Customer,我們就不應該讓這個類別有sales 的方法,我們只能讓這個類別有和Customer有最直接關係的方法。
5.- 把程式碼組織起來
把程式碼組織起來有兩具層次。
物理層組織:無論你使用什麼樣的目錄,包(package)或名字空間(namespace)等的結構,你需要把你的類別用一種標準的方法組織起來,這樣可以方便查找。這是一種物理性質的代碼組織。
邏輯層組織: 所謂邏輯層,主要是說,我們如果把兩個不同功能的類別或方法透過某種規範連結和組織起來。這裡主要關注的是程式模組間的介面。這就是我們經常見到的程式模組的架構。
6.- 創建大量的單元測試
單元測試是最接近BUG的地方,也是修改BUG成本最低的地方,同樣也是決定整個軟體品質好壞的成敗的地方。所以,只要有可能,你就應該寫更多的,更好的單元測試案例,這樣當你未來有相應程式碼改變的時候,你可以很簡單知道你程式碼的改變是否影響了其它單元。
7.- 經常重構你的程式碼
軟體開發是一種持續的發現的過程,從而讓你的程式碼可以跟上最新的實際需求的變化。所以,我們要常常重構自己的程式碼來跟上這樣的變化。當然,重構是有風險的,並不是所有的重構都是成功的,也不是我們隨時都可以重構程式碼。以下是兩個重構程式碼的先要條件,避免讓你引入更多的BUG,或是把本來就爛的程式碼變得更爛。
有大量的單元測試來測試。如前面所說,重構需要用大量的單元測試來做保障和測試。
每次重構都不要大,用點點滴滴的小的重構來代替那種大型的重構。有太多的時候,當我們一開始計畫重構2000行程式碼,而在3個小時後,我們就放棄這個計畫並把程式碼還原到原始的版本。所以,我們推薦的是,重構最好是從點點滴滴累積起來的。
8.- 程式註解是邪惡的
這條一定是充滿爭議的,大多數程式設計師都認為程式註解是非常好的,是的,沒錯,程式註解在理論上是非常不錯的。但是,在實際過程式當中,程式設計師寫出來的註解卻是很糟糕的(程式設計師的表達能力很有問題),從而導致了程式註解成為了一切邪惡的化身,也導致了我們在閱讀程式的時,大多數時候,我們都不讀註解而直接讀程式碼。所以,在這裡,我們並不是鼓勵不寫註釋,而是──如果你的註解寫得不夠好的話,那麼,你不如把更重要的時間花在重構一下你的程式碼,讓你的程式碼更易讀,更清楚,這比會比註解更好。
9.- 注重接口,而不是實現
這是一個最經典的規則了。介面注重的是--「What」是抽象,實作注重的是--「How」是細節。介面相當於一種合約契約,而實際的細節相當於對這種合約契約的一種運作和實現。運作是可以很彈性的,而合約契約則需要是相對需要穩定和不變的。如果,一個介面沒有設計好而需要經常性的變化的話,那我們可以試想一下,這代來的後果,這絕對會是一件成本很大的事情。所以,在軟體開發和調設中,介面是重中之重,而不是實作。然而我們的程式設計師總是專注於實作細節,所以他們局部的程式碼寫的非常不錯,但軟體整體卻設計得相對較差。這一點需要我們多注意。
10.- 程式碼審查機制
所有人都會出錯,一個人出錯的機率是很大的,兩個人出錯的機率就會小一些,人多一些,出錯的機率就會越來越小。因為,人多了,就能夠從不同的角度看待一個事情,雖然這樣可能導致無效率的爭論,但比起軟體產品release後出現問題的維護成本,這點成本算是相當值得的。所以,這就是我們需要讓不同的人來 reivew程式碼,程式碼審查機制不但是一種發現問題的最有效的機制,同時也是一種可以知識共享的機制。當然,對於Code Review來說,以下有幾個基本原則:
審查者的能力一定要大於或等於程式碼作者的能力,不然,程式碼審查就成了一種對新手的training。
而且,為了讓審查者真正負責起來,而不是在敷衍審查工作,我們需要讓審查者對審查過的程式碼負主要責任,而不是程式碼的作者。
另外,好的程式碼審查應該不是當程式碼完成的時候,而是在程式碼編寫的過程中,不斷地迭代程式碼審查。好的實踐的,無論程式碼是否完成,程式碼審核都需要幾天一次地不斷地進行。

以上就介紹了程式設計師共同開發網 程式設計師程式設計十條戒律,包括了程式設計師共同開發網方面的內容,希望對PHP教程有興趣的朋友有所幫助。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

會話如何劫持工作,如何在PHP中減輕它? 會話如何劫持工作,如何在PHP中減輕它? Apr 06, 2025 am 12:02 AM

會話劫持可以通過以下步驟實現:1.獲取會話ID,2.使用會話ID,3.保持會話活躍。在PHP中防範會話劫持的方法包括:1.使用session_regenerate_id()函數重新生成會話ID,2.通過數據庫存儲會話數據,3.確保所有會話數據通過HTTPS傳輸。

描述紮實的原則及其如何應用於PHP的開發。 描述紮實的原則及其如何應用於PHP的開發。 Apr 03, 2025 am 12:04 AM

SOLID原則在PHP開發中的應用包括:1.單一職責原則(SRP):每個類只負責一個功能。 2.開閉原則(OCP):通過擴展而非修改實現變化。 3.里氏替換原則(LSP):子類可替換基類而不影響程序正確性。 4.接口隔離原則(ISP):使用細粒度接口避免依賴不使用的方法。 5.依賴倒置原則(DIP):高低層次模塊都依賴於抽象,通過依賴注入實現。

在PHPStorm中如何進行CLI模式的調試? 在PHPStorm中如何進行CLI模式的調試? Apr 01, 2025 pm 02:57 PM

在PHPStorm中如何進行CLI模式的調試?在使用PHPStorm進行開發時,有時我們需要在命令行界面(CLI)模式下調試PHP�...

如何在系統重啟後自動設置unixsocket的權限? 如何在系統重啟後自動設置unixsocket的權限? Mar 31, 2025 pm 11:54 PM

如何在系統重啟後自動設置unixsocket的權限每次系統重啟後,我們都需要執行以下命令來修改unixsocket的權限:sudo...

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

如何用PHP的cURL庫發送包含JSON數據的POST請求? 如何用PHP的cURL庫發送包含JSON數據的POST請求? Apr 01, 2025 pm 03:12 PM

使用PHP的cURL庫發送JSON數據在PHP開發中,經常需要與外部API進行交互,其中一種常見的方式是使用cURL庫發送POST�...

See all articles