2013-03-18 80 views
1

我正在嘗試使用OOP構建Web應用程序。OOP web應用程序類設計

在我的應用程序中,我有課程和訂閱者。 每門課程可以有多個訂閱者(1-N關係)。 現在我需要在課程上執行一些操作(查看一些過期日期並對其進行操作,向管理員發送一些電子郵件),並在執行後在每個訂閱服務器上執行其他操作(發送電子郵件)。

我創建了一個Course類和一個Subscriber類。 課程類包含課程數據,如標題,日期,當前狀態以及一組訂閱者對象(參與者)。 訂戶類包含名稱,姓氏,訂閱狀態等。

我遇到問題。 我的課程課程需要注意它的訂閱者。

我的訂閱者類需要注意它所屬的課程(提取數據,如標題,日期等),並瞭解訂閱者的數量及其狀態。

我該如何重新設計我的班級結構來解決這個問題? 我正在考慮使用某種觀察者模式...

PS。我正在使用PHP

回答

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; 
     ... 
    } 
} 

訂戶對象只能使用一個療程的存在,所以你通過這門課程作爲參數構造函數。那裏新創建的用戶註冊本課程。

0

這聽起來像一個observer pattern直到點你說

並意識到很多用戶是如何和他們的狀態。

您需要Observer模式版本來暴露其觀察者的有限信息。

對於課程的每個用戶來說,這一點是類似的,您需要從課程對象中獲取所有用戶,以便您可以在課程對象中創建一個方法,該方法將爲您提供每個課程用戶的有限信息。

+0

你說得對。這就是阻止我使用這種模式的原因。 – Stefano 2013-03-18 10:37:32

+0

@Stefano:你應該通過編寫一個函數來暴露每個對象的有限信息,並且可以使用Observer Pattern – TalentTuner 2013-03-18 10:45:57

+0

ok。聽起來不錯。我會嘗試這種方式。 – Stefano 2013-03-18 10:57:05