У меня есть следующий объект уведомления:
Как видите, есть поле с именем «objectId», в котором я хочу сохранить идентификатор связанного объекта в зависимости от типа уведомления. Затем я добавляю уведомление в очередь электронной почты. Когда очередь обрабатывается, у меня возникает проблема с извлечением объекта из определенного класса обслуживания. Например:
Итак, как я могу определить эти отношения, не имея проблем с добавлением все новых и новых типов уведомлений. Плохо вводить все необходимые сервисы и обрабатывать их тысячами «если это чем то» 🙂
Если вы внедрили объект вместо идентификатора, вам не нужно будет вызывать дополнительный сервис внутри уведомления, чтобы получить соответствующий экземпляр.
Если 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
Вы вводите зависимую сущность, не зная ее конкретного вида.
Других решений пока нет …