【问题标题】:Having class object as a member instead of inheriting the class将类对象作为成员而不是继承类
【发布时间】:2014-08-13 13:40:12
【问题描述】:

我正在处理一个项目,其中我有一个代表客户订单的Order class

具有管理订单(如更改状态)和获取订单详情(如发票详情)的功能

我正在创建一堆类,将订单转移给我们的各个合作伙伴。

所以我有这样的课程:

class PartnerXOrder extends Order
class PartnerYOrder extends Order

在同行评审期间,一位同事建议我不应该扩展 Order,而是将其作为班级成员:

Class PartnerXOrder
{
   private $orderObj;
   function __construct()
   {
      $this->orderObj = new Order();
   } 
}

虽然我们确实讨论了一点,但我不太明白这种方法比扩展类有什么优势。很明显,其中之一是合作伙伴类将来需要扩展另一个类 - 但根据我们当前的架构,这根本不可能。

有人能解释一下吗? - 还是我的同事错了?

【问题讨论】:

  • 嗯,你的PartnerXOrderaOrder吗?它是否属于同一层次结构?在某些(或所有)情况下,Orders 可以替代PartnerXOrders 吗?还是您只是为了方便而扩展类?
  • @deceze - PartnerXOrder 有很多功能可以将订单转移到PartnerX...所以从技术上讲-Order 是实际的客户订单详情。而PartnerXOrder 是添加到 Order 以促进传输的附加功能 - 这就是为什么我认为扩展是有意义的。
  • 问问自己你是否曾经使用过PartnerXOrder而不是Order。你会将PartnerXOrder 的实例传递给function (Order $order) 吗?还是这两个完全不同的功能需要两种完全不同的类型?

标签: php class oop object inheritance


【解决方案1】:

我正在创建一堆类会将订单转移给我们的各个合作伙伴。

你的同事是对的。 基本上,要回答我的班级应该继承这个问题吗?,问问自己:我的班级YX 吗?(其中X 是名字你的父类)。

在您的情况下,PartnerXOrderOrder 吗?正如你所说,不:它的目的是将Order 转移到Partner

【讨论】:

  • 但是从 OOP 的工作原理来看,这不就是继承的用途吗?它正在为特定目的“扩展”父类的功能......
  • 继承是一种“是关系”。因此,如果PartnerXOrderOrder,则使用继承。否则,不要。
猜你喜欢
  • 2014-09-06
  • 2019-03-23
  • 1970-01-01
  • 1970-01-01
  • 2019-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多