1

OOP を使用して Web アプリケーションを構築しようとしています。

私のアプリケーションには、コースとサブスクライバーがあります。各コースは複数のサブスクライバーを持つことができます (1-N の関係)。ここで、コースでいくつかの操作を実行する必要があります (有効期限を確認し、サブスクライバーでアクションを実行し、管理者にメールを送信します)。それらを実行した後、各サブスクライバーで他の操作を実行します (メールを送信します)。

Course クラスと Subscriber クラスを作成しました。コース クラスには、タイトル、日付、現在のステータス、サブスクライバー オブジェクト (参加者) のグループなどのコース データが含まれます。サブスクライバー クラスには、名前、姓、サブスクリプション ステータスなどが含まれます。

私は問題があります。私の Course クラスは、サブスクライバーを認識している必要があります。

サブスクライバー クラスは、それが属するコースを認識し (タイトル、日付などのデータを抽出するため)、サブスクライバーの数とそのステータスを認識する必要があります。

これを解決するためにクラス構造を再設計するにはどうすればよいですか? ある種のオブザーバーパターンを使用することを考えていました...

PS。私はPHPを使用しています

4

2 に答える 2

0

あなたが言ったところまではオブザーバーパターンのように聞こえます

サブスクライバーの数とそのステータスを認識します。

オブザーバーの限られた情報を公開するバージョンのオブザーバーパターンが必要です。

この点は、コースの各サブスクライバーのようなものです。コースオブジェクトからすべてのサブスクライバーを取得して、コースの各サブスクライバーの限られた情報を提供するメソッドをコースオブジェクトに作成できるようにする必要があります。

于 2013-03-18T10:34:25.073 に答える
0

特別な設計パターンは必要ありません。これは通常の双方向の関連付けです。あなたの説明から、サブスクライバーは 1 つのコースのみをサブスクライブすることがわかります。それ以外の場合はStudentCourseSubscription代わりに 2 つのクラスが必要です。

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 に答える