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

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

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

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 05 мая 2009

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

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

0 голосов
/ 05 мая 2009

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

...