第 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 示例 – 定义范围