Какие могут быть минусы использования SINGLETON для реализации SERVICE(служба) по принципу Domain Driven Design?
Я не очень опытный разработчик.
SERVICE не имеет состояния в DDD. И вроде бы можно использовать Singleton для его реализации. Но какие могут быть минусы при расширении проекта. Может ли в данном случае усилиться зависимость объектов или сложность тестирования.
Вообщем стоит ли использовать Singleton для службы в DDD?
а как быть в случае с Entities или Aggregates?
Вот пример с книги DDD in PHP
class Post
{
// ...
public function publish()
{
$this->setStatus(
Status::published()
);
$this->publishedAt(new DateTimeImmutable());
DomainEventPublisher::instance()->publish(
new PostPublished(
$this->id
)
);
}
}
Изменять DomainEventPublisher::instance() на ижект DI ? Тогда как? или не использовать такой подход?
Myroslav Berlad: инжектите инстанс DomainEventPublisher в поле Post(через конструктор или сеттер) и используйте его в publish().
Не уверен насчет PHP, на Java(Spring DI) это выглядело бы так
@Component
public class Post {
private final DomainEventPublisher eventPublisher;
@Inject
public Post(DomainEventPublisher eventPublisher) {
this.eventPublisher = eventPublisher;
}
public void publish() {
//....
eventPublisher.publish(postPublished);
//....
}
}
Виталий Витренко: Подскажите, пожалуйста, еще вот что:
SERVICE(службы) в DDD логичнее всего устанавливать в зависимость как SINGLETON(setSingleton)? Ведь службы не имеют состояния, а значит, что создавать заново объекты нет смысла, лишняя трата ресурсов, правильно? Или все же есть какие то аргументы в пользу того, чтобы каждый раз создавать службы через DI заново?