【问题标题】:Where should I put functions not related to any single child object but rather related to the "collection" of them?我应该将与任何单个子对象无关但与它们的“集合”相关的函数放在哪里?
【发布时间】:2019-06-06 22:40:37
【问题描述】:

我最近参加了一个简单的 php 项目,以更好地了解 OOP。

基本上,该项目由一张桌子组成,其中可以插入多种不同类型的物品(食物、家具、电子产品等)。

我有一个abstract class Items(),它构造了与数据库的连接并定义了一个abstract function save_item()。对于扩展 Items() 的每种项目类型,我也有一个类,即class FurnitureItem extends Items()

ItemsFactory() 类只会生成正确的对象。

这样做是因为每个项目类型的属性略有不同,并且输入数据的处理方式应该不同。

但是,我也有诸如fetch_items()(只输出表中的所有项目)和delete_items()(批量删除不关心其类型的项目)之类的功能。这些函数函数与项目类型无关。

我的问题是,我应该把fetch_items()delete_items()放在哪里?

显然,它们与特定的项目类型无关(因此不应在子类中定义),但是在父类Items() 中定义它们似乎不合逻辑,因为子类也会继承这些功能。但由于上述原因,他们不应该这样做。

我应该为这些功能创建一个新类吗?那么本质上我会创建一个只包含项目通用函数的类。

任何帮助将不胜感激!

【问题讨论】:

  • 听起来是在每个脚本中使用这些函数的帮助类的好时机
  • 看起来这些方法更适合工厂,或者工厂可以访问的存储库类。
  • 听起来你可能想要一个收藏。

标签: php function oop inheritance


【解决方案1】:

显然,它们与特定的项目类型无关(因此不应在子类中定义),但是在父类 Items() 中定义它们似乎不合逻辑,因为子类也会继承这些函数。但由于上述原因,他们不应该这样做。

但您确实希望为每个子类型定义这些函数。您希望FurnitureItem 类具有delete_items() 函数(因为稍后您将为此类调用此函数)。由于该函数对其他子类型是通用的,因此将其包含在父类 Items 中是有意义的,因为这是删除任何“项目”的基本实现。基类通常总是用于包含所有子类共有的逻辑。

此外,如果您希望稍后为特定子类自定义实现 delete_items(),您可以覆盖该类中的函数

【讨论】:

    猜你喜欢
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多