0

我有一个基本的域对象,比如由数据库中的单个表表示的 Person 或 Campaign 或 Event。但是,我也有这些对象的更复杂版本,例如 PersonCampaign 或 PersonEvent 甚至是理论上可以扩展基础对象之一的 CampaignEvent。

然而,由于多种原因,这变得复杂,因为 PHP 不支持多重继承(例如 PersonEvent 扩展 Person 或 Event)。并且还因为一些域对象实际上是具有不同属性和功能的工厂对象(例如,事件实际上是按电子邮件、电话、传真等事件类型的子类)。

我能看到的最简单的解决方案是根据从数据访问层返回的数据来更改对象的实际性质。

有没有人有更好的方法来处理这个问题?或者创建可以根据数据访问层当前可用的内容更改属性和行为的统一域对象是否正确?

4

3 回答 3

2

一个解决方案是封装其他对象:

PersonEvent 类包含一个 Person 和一个 Event。

可通过函数 $PersonEvent->get_event() 或属性 $PersonEvent->Event 访问;

于 2009-02-01T16:34:57.920 回答
1

从 OOP 的角度来看,PersonEvent 并不是真正的对象,而是一种关系。

Person 类可以获得如下功能:

get_events()
add_event($Event)
remove_event($Event)

和事件类

get_person()
set_person($Person)
unset_person() // set person_id to NULL

(假设人和事件之间存在 1:N 的关系)

不好的部分是,这会使数据映射器复杂化或根本不会使用数据映射器。

于 2009-02-01T16:54:04.620 回答
0

有这样的设置怎么样:

表:人员、销售人员、客户人员等。人员表存储有关人员的所有子类型的通用信息。然后还有其他表 FK'd 到 person 表。它存储有关该子类型的其他唯一信息。

您的对象要么扩展,要么调用通用的“人”对象来访问主要数据,然后调用它的唯一类型对象来访问该子类型的唯一数据?

于 2009-01-28T17:55:34.660 回答