Как правильно вызвать нужный класс? Всем привет! Помогите понять как лучше всего вызвать нужный класс
Я упрощу изложение вопроса до нескольких модулей на сайте... Допустим, на сайте есть модули: комментарий, посты, пользователи
Для каждого модуля есть свой набор возможностей (лайк для комментариев и постов, подписка для пользователя и т.д.). Возьмем для примера только лайк
Лайки у меня ставятся по принципу: тип объекта и его ID отсылается к единому файлу на сервере like.php. Значит ставя лайк для поста 333, файл like.php получает значение: type == post и id == 33
Далее, для каждого типа объекта есть свой классы, которые отвечают за генерацию объекта уведомления в БД. т.е. Устанавливая лайк посту 333, файл like.php должен создать объект класса LikePost и вызвать метод createNotify передавая в него нужные параметры. Вот как я это делаю сейчас:// это файл like.ph
//........
switch($object_type)
// проверяем тип объекта и вызываем метод создания уведомления нужного класс
case 'post'
/*
* т.к. файл like.php знает только тип и ID объект
* то уже внутри класса LikePost вызывается модель (в этом случае поста
* и получаем ID автора поста, чтобы записать его вместе с уведомлением ка
* получателя этого уведомлени
*
LikePost::createNotification($auth->user_id, $object_id)
break
case 'comment'
// тот же смысл что при type == pos
LikeComment::createNotification($auth->user_id, $object_id)
break
case 'news'
// тот же смысл что при type == pos
LikeNews::createNotification($auth->user_id, $object_id)
break
//..... и т.д

//........
У меня все получается, все работает, но код получается очень разбросанным, выходит что если на объект можно подписаться, поставить лайк, добавить комментарий, поделиться. То в каждом таком файле как like.php, мне нужно создавать такие проверки. И при добавлении на сайт какого-то нового типа объекта не забывать добавлять это все по каждому такому файлу, кроме того, изменяя название типа объекта, мне нужно будет в каждом тиком файле искать его и переименовывать
На сколько я понимаю - это не правильный подход, но другого я придумать не могу, поэтому прошу объяснить, как на самом дела это все красиво делается?

21 Авг 2019 в 07:00
209 +1
0
Ответы
1

Для упрощения и оптимизации вашего кода, вам стоит использовать паттерн проектирования "Фабричный метод" или "Фабрика".

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

Примерно это может выглядеть так:

Создайте интерфейс/абстрактный класс NotificationFactory, в котором будет метод createNotification($auth_user_id, $object_id).Создайте классы для каждого типа объекта (LikePost, LikeComment, LikeNews), которые будут реализовывать этот интерфейс/наследоваться от абстрактного класса.В самом файле like.php создайте переменную, которая будет хранить объект фабрики в зависимости от типа объекта.Вызывайте метод createNotification через эту переменную, передавая необходимые аргументы.

Пример реализации:

interface NotificationFactory
public static function createNotification($auth_user_id, $object_id)

class LikePost implements NotificationFactory
public static function createNotification($auth_user_id, $object_id)
// Реализация создания уведомления для пост

class LikeComment implements NotificationFactory
public static function createNotification($auth_user_id, $object_id)
// Реализация создания уведомления для комментари

// В вашем файле like.ph
switch($object_type)
case 'post'
$factory = new LikePost()
$factory::createNotification($auth->user_id, $object_id)
break
case 'comment'
$factory = new LikeComment()
$factory::createNotification($auth->user_id, $object_id)
break
// Для других типов объектов создайте соответствующие классы и добавьте их обработку здес
}

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

20 Апр в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 90 700 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир