Дизайн - как мне обрабатывать события на постоянных объектах, когда они меняют состояние?

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

  •  05-07-2019
  •  | 
  •  

Вопрос

Может быть, это глупый вопрос, но я начинающий разработчик.

Допустим, в управляемом данными приложении CRM есть тип клиента, который может проходить через несколько этапов - то есть этапы 1 - 5.

Когда клиент меняет фазу - события должны срабатывать. Пример - когда клиент входит в фазу 3 со стадии 2, отправляется электронное письмо, обновляются некоторые списки и выполняются некоторые расчеты.

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

Поэтому мне интересно - должен ли я справиться с этим, утверждая, что есть только один способ обновить фазовое состояние клиента, а затем убедиться, что, когда это действие завершается, выполняется список действий?

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

Есть какие-нибудь мысли по этому поводу? Я на самом деле просто ищу какой-либо ввод - предположим, что я совершенно не в курсе.

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

Решение

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

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

Другие советы

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

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