# Processing domain events

***Из книги Unit Testing: Principles, Practices, and Patterns Хориков, 177 страница***

**Проблема**: Бывает, что при вызове метода, который меняет состояние в итоге ничего не должен менять. Database - это implementation details, Domain Events - это observable behavior.

Если вызов метода произошел, то он должен быть отображен для внешних систем. Поскольку database у нас только для внутреннего использования, то тут неважно, будет ли еще один запрос на изменение данных БД.

Наша цель отправлять event только в том случае, если сообщение реально изменилось.

**Решение**: создать в сущности список созданных событий, чтобы в контроллере не делать if, мол похож ли имейл, просто циклом пробегать, таким образом избегая логики в контроллере.

### **До:**&#x20;

![](https://4036917255-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ls19xoIyEq5scKQ_mt3%2F-M3RPT3uEQ6rP9I0oY6g%2F-M3RQL0JrEy7mxvQqxra%2FScreenshot%20from%202020-03-27%2017-34-48.png?alt=media\&token=d4032cc2-fcca-44bf-bb4c-9c393c35de8a)

После:

![](https://4036917255-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ls19xoIyEq5scKQ_mt3%2F-M3RPT3uEQ6rP9I0oY6g%2F-M3RQPXyTIIiGe4X4-nS%2FScreenshot%20from%202020-03-27%2017-34-58.png?alt=media\&token=86b01dd5-641c-4046-abf2-0b061e3bf1f5)

![](https://4036917255-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ls19xoIyEq5scKQ_mt3%2F-M3RPT3uEQ6rP9I0oY6g%2F-M3RQXmGe9IQCFkA8YDB%2FScreenshot%20from%202020-03-27%2017-35-03.png?alt=media\&token=9dc00e88-6f39-4aff-bdc4-2496d9012b0d)
