Использование событий для изменения объектов домена

StackOverflow https://stackoverflow.com/questions/2145545

  •  23-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь понять, когда уместно использовать события.Мне кажется, что событие можно рассматривать как триггер SQL.Тогда правильно ли использовать событие, инициируемое одним объектом домена, для изменения другого, или это будет означать отсутствие хорошо продуманного дизайна, если мы используем события для изменения состояний другого объекта?Или должен быть класс-посредник, посредством которого эти объекты должны модифицировать друг друга?Как мне решить?

Есть ли здесь какие-либо компромиссы, о которых мне следует беспокоиться, например, как использование событий повлияет на тестируемость?

Это было полезно?

Решение

Мероприятия призваны отделить одну область от другой..

Иногда это предполагает некоторые асинхронное поведение, что может быть дополнительной функцией, но не обязательно.Например, если вы хотите предоставить пользователю быструю обратную связь через графический интерфейс, а часть вашего кода выполняется слишком медленно (если только его не нужно завершить перед предоставлением обратной связи), то обычный вызов может выполнять быстрые коды и создавать событие для остальных, а затем предоставьте обратную связь через графический интерфейс, не дожидаясь фактической обработки события.Это событие сохраняется в очереди, и один или несколько потоков обрабатывают эту очередь в своем собственном темпе.

Для синхронных событий это действительно полезно для межмодульной связи, где два модули не имеют зависимостей друг от друга во время компиляции.Оба могут знать о классе событий и «маршрутизаторе событий»:

  • один модуль создает событие и вызывает маршрутизатор,
  • маршрутизатор знает (из предыдущей конфигурации), какой другой модуль должен его получить, и отправляет его принимающему модулю.

Ни один модуль не знает о другом, отсюда и концепция развязки.Очень хорошо, если оба нужно поддерживать отдельно :-)


Существует множество вариаций по некоторым темам, например:

  • вещание для многих получателей
  • аварийное переключение (если приемник временно отключен, он запускается снова;событие будет доставлено, когда приемник включится и снова зарегистрируется)
  • аудит :технический модуль может получать события, направленные на другие модули, и регистрировать их
  • ...

Изменение объектов домена с помощью событий кажется немного странным..Действительно ли оправдано упомянутое выше разделение?

Однако я бы не стал давать однозначного мнения, пока не пойму точнее, что вы имеете в виду.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top