1

我正在尝试使用 OOP 构建 Web 应用程序。

在我的应用程序中,我有课程和订阅者。每个课程可以有多个订阅者(1-N 关系)。现在我需要对课程执行一些操作(检查一些过期日期并对其订阅者执行操作,向管理员发送一些电子邮件),并且在执行完这些操作后,对每个订阅者执行其他操作(发送电子邮件)。

我创建了一个 Course 类和一个 Subscriber 类。课程类包含课程数据,如标题、日期、当前状态和一组订阅者对象(参与它的人)。订阅者类包含姓名、姓氏、订阅状态等。

我有个问题。我的课程类需要知道它的订阅者。

我的订阅者类需要了解它所属的课程(以提取标题、日期等数据)并了解订阅者的数量及其状态。

我如何重新设计我的班级结构来解决这个问题?我正在考虑使用某种观察者模式......

PS。我正在使用 PHP

4

2 回答 2

0

不需要特殊的设计模式,这是正常的双向关联。我从你的描述中得知,任何订阅者只订阅一门课程,否则应该有两个课程StudentCourseSubscription而不是。

如何在 PHP 中简单地构造关联:

class Course
{
    /**
     * @var Subscriber[]
     */
    protected $subscribers = array();

    public function addSubscriber(Subscriber $subscriber)
    {
        $this->subscribers[] = $subscriber;
    }
}

class Subscriber
{
    /**
     * @var Course
     */
    protected $course;

    public function __construct(Course $course, $name, ...)
    {
        $this->course = $course;
        $course->addSubscriber($this);
        $this->name = $name;
        ...
    }
}

订阅者对象只能与课程一起存在,因此您将课程作为参数传递给构造函数。新创建的订阅者在那里注册课程。

于 2013-03-18T10:27:20.887 回答
0

这听起来像一个观察者模式,直到你说的那一点

并了解订阅者的数量及其状态。

你需要一个观察者模式的版本,它暴露了观察者的有限信息。

这一点类似于课程的每个订阅者,您需要从课程对象中获取所有订阅者,以便您可以在课程对象中创建一个方法,该方法将为您提供课程每个订阅者的有限信息。

于 2013-03-18T10:34:25.073 回答