Патерни проєктування в PHP: практичне використання

Оточення

Установка

  • Склонуйте репозиторій git clone https://github.com/anyt/design-patters-workshop.git
  • Запустіть сервіси за допомогою docker-compose up -d
  • Встановіть застосунок за допомогою composer install
  • Запустіть сервер за допомогою symfony serve -d
  • Відкрийте сторінку в браузері за адресою https://127.0.0.1:8000/?student_id=1&course_id=5.

Завдання

  1. Реалізувати патерн фабричний метод для створення об'єктів Enrollment з Student та Course.
  2. Створити інтерфейс EmailFactoryInterface::createEmail(Student $student, Course $course): Email та реалізувати патерн абстрактна фабрика для створення листів у LMSController.
  3. Створити інтерфейс EmailSenderInterface::sendEmail(string $to, string $subject, string $body): void та реалізувати патерн адаптер від Symfony\Component\Mailer\MailerInterface до нового інтерфейсу.
  4. Створити окремий клас замість App\Traits\LoggableToFileTrait та реалізувати патерн декоратор замість наслідування App\Services\LoggableTransport.
  5. Реалізувати патерн фасад для взаємодії з Doctrine\ORM\EntityManagerInterface у LMSController.
  6. Створити інтерфейс CourseValidationStrategyInterface::validate(Student $student, Course $course): bool та реалізувати патерн стратегія для валідації курсів у LMSController.
  7. Створити подію StudentEnrolledEvent та реалізувати патерн спостерігач для логування, відправки листів та гейміфікації у LMSController за допомогою посередника (symfony event dispatcher).
  8. Створіть інтерфейс GamificationVisitorInterface::visit(Student $student, Course $course): void. Використовуючи патерни відвідувач та компонувальник відрефакторіть логіку гейміфікації.
  9. Реалізувати патерн ланцюжок обов'язків для валідації реєстрацій студентів у LMSController.