Как назвать событие, описывающее подтверждение существования сущности в системе источников событий? - PullRequest
0 голосов
/ 29 ноября 2018

Я новичок в Event Sourcing, и я подумываю использовать его для промышленного применения для отслеживания событий, происходящих на производственном объекте.

Поскольку книга записей - это само производственное предприятие, а не система, иКроме того, поскольку не все автоматизировано, работники должны будут сообщать в определенный момент времени (зарегистрированное время), что они сделали в другой момент времени (эффективное время).Поэтому я буду использовать такие события, как: TankFilledRecorded, TankOutputConnectedToPipeInputRecorded, ContainerMovedToFacilityAreaRecorded и т. Д., Где эти события относятся, например, к таким объектам, как танк, труба или зона объекта.Эти события будут иметь как записанное время, так и эффективное время.Обратите внимание, что не существует процесса представления или утверждения для записи, которая будет считаться законной.

Проект, управляемый доменом (DDD), поощряет разработку событий, которые отражают то, что происходит в домене (как те, что указаны выше).Тем не менее, в моей области меня не волнует, как появился танк, труба или территория объекта.Мне просто нужно знать, что что-то существует с определенного момента времени, и мне также нужно знать, не существует ли этого после определенного момента времени.Основной целью программного обеспечения является отслеживание жидкостей и порошков, протекающих в цепи, состоящей из этих труб, резервуаров и других компонентов.Это не система управления активами, и она не должна стать ею.

Следовательно, каков будет правильный метод DDD для разработки события, отражающего тот факт, что в производстве есть резервуар, труба или участоксредство?

Это тонкий вопрос, но язык важен, особенно в DDD.

Вот что я придумал:

1 EntityExistenceAcknowledgmentRecorded

TankExistenceAcknowledgmentRecorded
PipeExistenceAcknowledgmentRecorded
FacilityAreaExistenceAcknowledgmentRecorded
TankDisappearanceAcknowledgmentRecorded
PipeDisappearanceAcknowledgmentRecorded
FacilityAreaDisappearanceAcknowledgmentRecorded

Кажется ужасным использовать это на вездесущем языке.Я не вижу себя говорящим в этих терминах или предоставляющим пользовательский интерфейс с таким словарным запасом.Но это точно отражает то, что происходит.

2 EntityRegistered

TankRegistered
PipeRegistered
FacilityAreaRegistered
TankUnregistered
PipeUnregistered
FacilityAreaUnregistered

Кажется, что это намного проще, и это также имеет смысл, за исключением одной вещи.«Зарегистрированный» передает существование представления субъекта в системе с немедленным вступлением в силу , без возможности сказать сейчас, что субъект существовал 2 дня назад.Подумайте о событии UserRegistered на веб-сайте, которое указывало бы на то, что пользователь «существовал» 10 дней назад.Что бы это даже значило?

События - это факты, и вы не можете изменить прошлое.Однако мне нужен способ, чтобы мои пользователи могли сделать недействительной запись, в которой они допустили ошибку, такую ​​как опечатка.Теперь они могут записать, что они признали существование области объекта неделю назад и могли бы понять позже, чем было что-то не так, например, опечатка в имени объекта.Они сделали бы запись недействительной и создали бы новую.Но аннулировать что-то, что было «зарегистрировано», звучит неправильно.

3 Продолжайте искать

Попытайтесь копать больше в домене (штурм событий) и найдите реальные события, которые принесли сущностидаже если эти события бесполезны в проблеме, которую необходимо решить.

TankBuiltRecorded
PipeBuiltRecorded, PipeDeliveredRecorded
FacilityArea<something_meaningful>Recorded
TankDestroyedRecorded, TankDecommissionedRecorded
PipeDecommissionedRecorded
FacilityArea<something_meaningful>Recorded

1 Ответ

0 голосов
/ 29 ноября 2018

Предупреждение

TankFilled
TankFilledReported
TankFilledReportSubmitted
TankFilledReportSubmissionReceived

Тщательно продумайте, мотивируется ли повышение точности бизнес-ценностью.

Следовательно, каков будет правильный метод DDD для разработки события, котороеолицетворяет тот факт, что на заводе есть резервуар, труба или участок?

Чем сегодня занимается бизнес?Уже существует процесс для отслеживания срока службы оборудования на предприятии (возможно, журнала технического обслуживания?). В этом месте, вероятно, есть словарь, который дает вам идеи относительно того, какое написание будет иметь смысл в коде.

События - это факты, и вы не можете изменить прошлое.

Это правда, но вы можете отложить дату события.Дата вступления в силу информации часто отличается от сообщенной даты информации.

Мне нужен способ, чтобы мои пользователи могли сделать недействительной запись, в которой они допустили ошибку, такую ​​как опечатка.

Да - исправление ошибок является важной частьюпроцесс, который вы моделируете.

Вероятно, вам следует прочитать доклад Грега Янга Ответ на вопрос , основанный на этой теме .Это обсуждение захвата и моделирования темпоральности.

Вот хорошие новости: вы столкнулись с проблемой right .Поскольку вы собираете информацию о внешней системе, будут возможности для ошибок и конфликтов, и вам необходимо (а) выяснить протоколы для их устранения, а затем (б) смоделировать этот процесс правильно.Это может включать в себя отчеты об исключениях, сгенерированные системой, когда она обнаруживает противоречивую информацию, или компенсационные события, или даже автоматическое разрешение конфликтов (для простых случаев - см. Также Stop Over Engineering ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...