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