Design - como faço para lidar com eventos em objetos persistentes como eles mudam de estado?

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

  •  05-07-2019
  •  | 
  •  

Pergunta

Talvez uma pergunta boba isso, mas eu sou um desenvolvedor novato.

Vamos dizer que, em uma aplicação CRM'ish data-driven, eu tenho um tipo de cliente que pode passar por uma série de fases - isto é, fases 1 -. 5

Como um cliente muda de fase - eventos devem acionar. Exemplo -. Como um cliente entra em fase 3 da fase 2, é enviado um email, algumas listas são atualizados e alguns cálculos são realizados

Eu estou imaginando que um cliente mudar o estado poderia ser o resultado de um usuário do aplicativo atualizar manualmente o cliente através de alguma interface gráfica.

Então, eu estou pensando? - devo lidar com isso ao afirmar que só há uma forma de atualizar o estado fase do cliente e, em seguida, garantir que sempre que completa ação, uma lista de ações são realizadas

Na minha mente (e cenário) isso significaria recuperar um cliente de um banco de dados relacional, atualizando um campo de fase, persistindo o cliente de volta para baixo, e, em seguida, sempre reagindo a esta ação disparando o que ações são registradas como dependente desse nomeadamente, que muda de fase. No entanto, eu não estou certo de que este seria inteligente se eu queria fazer uma mudança de fase lote de 10.000 clientes.

Todos os pensamentos em tudo para isso? Estou realmente apenas à procura de qualquer tipo de entrada -. Assumir que eu sou completamente à nora

Foi útil?

Solução

Eu acho que é OK para ter funções separadas, uma para uma única mudança de fase ao cliente e outro para uma mudança de lote. Este último iria ou não realizar as ações adicionais, conforme necessário. Ele também poderia fazê-lo de uma forma mais eficiente, ou mesmo enfileirar as ações, ou parte deles, como o envio de e-mails, para o processamento de fundo, se as ações adicionais são longos e que é necessário para completar a mudança de fase em uma oportuna maneira.

Outra questão surge quando a mudança de fase é devido ao surgimento de alguns, possivelmente complexa, condições, e não devido a uma mudança de fase manual. Então você deve ligar uma condição de verificação em algum lugar na sua lógica de negócios, baixo o suficiente para pegar todas as operações de atualização afetando a fase. Mas, como você escreveu, que não é o caso, já que em sua situação a mudança de fase é emitido manualmente.

Outras dicas

Em muitos casos, é melhor ter uma função explícita em você lógica de negócios para mudar a fase. Esta deve ser a única maneira de mudar a fase, e é explícita. Como "ChangeCustomerPhase (Cliente, Fase newPhase). Isso torna muito mais simples de lidar com isso para acompanhar as mudanças se tudo pode ser alterado livremente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top