タスクの工場設計パターンを実装するのを手伝ってください。
スケジュールされたメッセージ送信 Web アプリケーションに取り組んでいます。ユーザーは自分のスケジュールされた送信計画を指定でき、必要なときにメッセージが配信されます。ユーザーは、月次、週次、日次の 3 つの繰り返しタイプから 1 つだけを選択できます。この 3 つの繰り返しタイプのアルゴリズムは似ています: 1) 送信日時を選択します (最初の配信の場合) 2) 繰り返しタイプに応じて「X か月/週/日ごとに繰り返す」オプションを選択します 3) タイプ (日付または日付) で終了を指定します発生制限)
毎週のスケジューラは少し異なります。もう 1 つの機能があります - 繰り返す曜日 (例: 月、金ごとに繰り返す)
class SchedulerFactory {
public function create($type) {
switch ($type) {
case "monthly" :
$Scheduler = new MonthlyScheduler();
break;
case "weekly" :
$Scheduler = new WeeklyScheduler();
break;
case "daily":
$Scheduler = new DailyScheduler();
break;
default:
return null;
}
}
}
セッター メソッド:
$SendScheduler->setSendDateAndTime("{$day}.{$month}.{$year}", time());
switch($end_by_type) {
case 'by_date':
$SendScheduler- >setEndByDate("{$end_by_date_day}.{$end_by_date_month}.{$end_by_date_year}");
break;
case 'by_occurences_limit':
$SendScheduler->setOccurencesLimit($occurences_quantity);
break;
}
$SendScheduler->addTaskOccuringEvery($RepeatEveryMonth);// repeat every X months/weeks/days depending on type
// only for weekly type
$SendScheduler->setWeekDayForRepeating($week_day); // repeat every Mon, Fri
オブジェクトの構築に Factory パターンを使用したいのですが (これが最適ですか?)、このすべてのパラメーター ($type だけでなく、その他すべて) をオブジェクトの構築に渡す方法がわかりません。
それらを単一のデータ オブジェクトにラップして作成し、SchedulerFactory クラスでメソッド「setOptions」を作成し、このデータ オブジェクトを getter を介して「作成」構築メソッドに渡す必要がありますか?
Factory クラスでそのようなセッター メソッドを作成することは、Factory デザイン パターンの原則に違反しているのでしょうか。前にこのような例を見たことがなかったので、今は少し混乱しています。
まったく間違った方向に進んでいる場合は、お知らせください。このタスクにはどのソリューションをお勧めしますか?
前もって感謝します