Происходит следующее. Метод startDiscussionFor проверяет некоторый инвариант, а именно закрыт форум или нет и в случае если форум всё же не закрыт, то создает объект Discussion и возвращает его. На уровне приложения происходит обращение к данному методу и таким образом инициируется новое обсуждение, после чего происходит его сохранение в хранилище.
Можно по другому. Ниже пример на псевдоязыке.
Код: Выделить всё
class Discussion {
constructor(Forum forum, string subject, Author author) {
if (forum.isClosed()) {
throw new IllegalStateException("Forum is closed.");
}
...
this.forumId = forum.id;
this.subject = subject;
this.author = author;
}
...
}
Код: Выделить всё
...
discussion = new Discussion(forum, subject, author);
this.discussionRepository().save(discussion);
...
Хочу услышать ваше мнение, какой подход вам ближе и почему.