Как ввести «неизвестный / динамический» зависимости

У меня есть следующий объект уведомления:

схема таблицы

Как видите, есть поле с именем «objectId», в котором я хочу сохранить идентификатор связанного объекта в зависимости от типа уведомления. Затем я добавляю уведомление в очередь электронной почты. Когда очередь обрабатывается, у меня возникает проблема с извлечением объекта из определенного класса обслуживания. Например:

  • Тип уведомления 1: UserService :: getUser ($ objectId)
  • Тип уведомления 2: CompanyService :: getCompany ($ objectId)

Итак, как я могу определить эти отношения, не имея проблем с добавлением все новых и новых типов уведомлений. Плохо вводить все необходимые сервисы и обрабатывать их тысячами «если это чем то» 🙂

0

Решение

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

Если Notification не нужно знать, какой тип объекта он использует, просто зависит от интерфейса, который User а также Company внедрить и внедрить эти объекты непосредственно в Notification,

Например.:

interface EmailNotifiableEntity {
function getLabel()

function getEmailAddress()
}class User implements EmailNotifiableEntity {
public function getLabel() {
return $this->getName() . " " . $this->getFullName();
}

public function getEmailAddress() {
return this->getEmailAddress();
}}

class Company implements EmailNotifiableEntity {
public function getLabel() {
return $this->getCompanyName();
}

public function getEmailAddress() {
return this->getNotificationsEmail();
}
}

class Notification {

public function __construct(EmailNotifiableEntity $entity) {
$this->entity = $entity;

}public function send() {

$address = $entity->getEmailAddress();
$label   = $entity->getLabel();

// do your thing to send your notification
}

(Реализация немного скучна, поэтому возьмите то, что вам нужно, и опирайтесь на него). Таким образом, когда вы создаете Notification Вы вводите зависимую сущность, не зная ее конкретного вида.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector