2013-03-18 2 views
1

Я пытаюсь создать веб-приложение с использованием ООП.Дизайн класса веб-приложений OOP

В моем приложении у меня есть курсы и подписчики. На каждом курсе может быть несколько подписчиков (отношение 1-N). Теперь мне нужно выполнить некоторые операции с курсами (проверьте некоторые даты истечения срока действия и выполните действия над его подписчиками, отправьте электронные письма админам), а после их выполнения выполните другие операции над каждым подписчиком (отправьте письма).

Я создал класс курса и класс подписчика. Курс включает в себя данные курса, такие как название, даты, текущий статус и группу объектов подписчика (те, кто его разделяет). Класс подписчика содержит имя, фамилию, статус подписки и т. Д.

У меня есть проблема. Класс моего курса должен знать о его подписчиках.

Класс моего подписчика должен знать о том, к какому курсу он относится (для извлечения данных, таких как название, даты ...), и знает, сколько подписчиков и их статус.

Как я могу изменить структуру своего класса, чтобы решить эту проблему? Я думал об использовании своего рода шаблона наблюдателя ...

PS. я использую PHP

ответ

0

Нет необходимости в специальном шаблоне проектирования, это обычная двунаправленная связь. Из вашего описания я получаю, что любой абонент подписывается только на один курс, иначе должны быть два класса Student и CourseSubscription.

Как просто построить ассоциацию в 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; 
     ... 
    } 
} 

Объект абонент может существовать только с курсом, так что вы пройти курс в качестве параметра конструктору. Там вновь созданный абонент регистрируется для курса.

0

это звучит как observer pattern до точки вы сказали

и знать, сколько подписчиков и их статус.

Вам нужна версия Observer Pattern, которая предоставляет ограниченную информацию о ее наблюдателях.

Этот вопрос является чем-то вроде каждого подписчика курса, вам нужно получить всех подписчиков от объекта курса, чтобы вы могли создать метод в объекте курса, который предоставит вам ограниченную информацию для каждого абонента курса ,

+0

Вы правы. Это то, что мешает мне использовать этот шаблон. – Stefano

+0

@Stefano: вы должны использовать инкапсуляцию для объекта курса, написав функцию, которая будет предоставлять ограниченную информацию о каждом объекте, а для остальной части проблемы вы можете использовать шаблон наблюдателя – TalentTuner

+0

ok. Это звучит неплохо. Я попробую. – Stefano

Смежные вопросы