第 4 部分 – WordPress 和麵向對象編程:一個 WordPress 示例 – 設計

已發表: 2022-02-03

在這一點上,我們已經有了明確定義的需求,正如本系列的第 3 部分中所描述的那樣(如果您錯過了,請在此處查看)。

現在是時候開始考慮我們新的和改進的插件的設計了!

我們想提醒您,當您在自己的項目中嘗試此步驟時,可能需要很長時間。 您可能也不會第一次就做好一切。 很可能你會想出一個設計,開始實施它,然後意識到你需要回去重新考慮你的方法。

不過,這完全值得付出努力,因此需要盡可能多的時間來讓一切都恰到好處。 一個結構良好的項目將使其更易於維護和擴展,甚至可以在其他項目中重用其代碼,因此從長遠來看,這是一種很好的時間利用。

接下來,我們將專注於插件的一些關鍵部分,並討論我們是如何設計的。

剖析設置頁面

讓我們仔細看看插件的管理頁面。

您會注意到有一個標題(“限制登錄嘗試設置”),包含一些字段的幾個部分,以及頁面底部的“更改選項”按鈕。

每個部分都由一個標題(如“統計”)和一些字段組成。

每個字段的左側都有一個標題,右側有其其餘內容。 有文本字段、單選按鈕和復選框,其中一些,如“Total Lockouts”,僅顯示信息,管理員用戶不能直接修改。

一些字段還包括描述,例如“站點連接”字段,但不是全部。

考慮到上述情況,我們必須將其分解為稍後將成為類的概念部分。

WordPress 設置 API 允許我們註冊設置頁面、這些頁面中的部分以及這些部分中的字段:

頁面 → 部分 → 字段

我們想,為什麼不再添加一個“層”,即元素,以使我們的插件在未來更容易擴展。

頁面 → 部分 → 字段 → 元素

因此,Pages 和 Sections 就是我們上面已經解釋過的內容,並且 Fields 將在右側包含任何內容類型的元素。

考慮到所有這些不同類型的元素,我們使用了一個 Element 類和幾個類,並對其進行了擴展,用於復選框、單選按鈕、數字等,它們將呈現不同的輸出。

將來我們可能還需要添加更多頁面和部分。 所以很可能我們需要擴展這些管理頁面和部分類。

字段也是如此。 “Total lockouts”、“Active lockouts”等的類將擴展同一個(父)類。

這是演示這些關係的簡化視覺效果:

當然,並非所有“組件”都包含在圖表中。

這樣的結構使插件更容易擴展; 如果需要,我們可以輕鬆添加字段、元素或部分。 通過創建新的子類,我們將能夠輕鬆地添加更多組件(字段、元素或部分),而無需修改現有的子類。

思考與抽象

現在是開始思考我們插件的各個組件的作用的好時機。 在設計階段,我們不必詳細介紹某件事情的工作原理。

例如,考慮所有將要顯示給用戶的元素、表格、統計信息以及幾乎所有其他內容。 它們可能是沒有共同點的獨立組件,但最終都會呈現一些輸出。 因此,某些功能對於原本完全不相關的組件將是通用的。 當然,這也延伸到我們的其他組件。

在上面的可視化中,我們看到了一個 UI 界面是如何由多個類實現的。

請注意,UI 界面是由稱為類的 Statistics、Lockout Logs、Table 和 Element 類實現的。 Radio/Number/Checkbox Element 類不需要直接實現接口,因為它們繼承了父類的所有接口。 但是,子類可以覆蓋其父類的方法。

由於我們知道我們的插件將處理設置,我們可以放心地假設我們將讀取和寫入它們的值。 也就是說,能夠獲取設置刪除選項。

所有這些動作都將捆綁在一個類中。 我們可能會將我們的選項存儲在 WordPress 數據庫或類似的東西中。 目前,我們不必關心我們將如何在何處存儲數據。

我們可以將 get/set/remove 選項抽像在我們的腦海中,從概念上簡化事情,並繼續設計我們的插件。

主插件文件

在這裡,我們將通過標題註釋向 WordPress 提供有關插件的一些信息並執行一些初始化。 我們將通過將所有內容包裝在一個小類中來組織我們的代碼。

根據我們插件的類如何協同工作,主類必須實例化其中的大部分。 據我們所知,這將包括與選項、管理頁面、重試和鎖定相關的類。

潛在的類

我們花了一些時間來嘗試找出我們需要哪些課程,最終得到瞭如下列表:

  • 重試
  • 停工
  • 餅乾
  • 錯誤信息
  • 電子郵件通知
  • 管理員通知
  • 鈕扣
  • 鎖定日誌
  • 活動/總鎖定
  • IP地址

請記住,沒有一種“正確”的方式來構建你的插件。 與軟件開發中的大多數事情一樣,有多種同樣有效的方法來解決問題。

例如,在“常規”部分中,我們的類之間的關係如下所示:

“統計”部分將與此類似:

最後,“鎖定日誌”將與“統計”非常相似:

結論

到目前為止,我們定義了我們的要求並考慮了我們新的和改進的插件的設計。 我們解釋了我們是如何提出我們的結構的,還提供了一些簡單的圖表來展示我們的類如何相互關聯。

單擊此處閱讀面向對象編程系列的第 5 部分

也可以看看

  • WordPress 和麵向對象的編程——概述
  • 第 2 部分 – WordPress 和麵向對象編程:一個真實世界的示例
  • 第 3 部分 – WordPress 和麵向對象編程:A WordPress 示例 – 定義範圍