Pergunta

Say, eu estou construindo um aplicativo de gerenciamento de processos de negócios. Tem as seguintes entidades: problemas e tarefas, relacionadas entre si como um problema para muitas tarefas. Ambos, tarefa e emissão, têm os seus próprios estados eo estado de um pode influenciar o estado de outro.

Por exemplo, ambos têm "Cancelado" e "Concluído" estados. Quando eu mudar o estado da questão para "Cancelado", todas as suas tarefas deve tornar-se "Cancelado". Quando eu mudar o estado de todas as tarefas para "Concluído", a questão deve automaticamente tornam-se "Concluído".

Supondo que existem muito poucos estados para ambas as entidades e a lógica de transições de um estado para outro e a dependência de estados pode mudar, existem padrões de design e / ou melhores práticas para lidar com essa situação?

Foi útil?

Solução

O padrão de design que salta para notar é uma "regra"; -)

Ou, se preferir, um padrão de comando

Em outras palavras, para situações como esta eu iria criar uma tabela de banco de dados listando os estados e transições aceitáveis, e associar uma ação com cada transição (usando a reflexão)

Eu encontrei este para ser útil para lidar com casos em que a ação de transição é mais complexa do que apenas atualizar os status para corresponder.

Por exemplo, em um sistema que tinha um fluxo de trabalho onde um documento de solicitação teve que passar por várias estações Review Committee, cada um dos quais pode rejeitar ou passar o documento para a próxima fase, além de costume efeito colateral procesing. A organização do comitê, o processamento de estruturas, e processamento de acções mudou significativamente três vezes durante o desenvolvimento , e mais cinco vezes no primeiro ano de implantação.

Outras dicas

Eu prefiro o observador padrão para este tipo de coisa: http://en.wikipedia.org/ wiki / Observer_pattern no exemplo que você deu, eu teria tarefas observar sua emissão e questões observar suas tarefas. Quando um problema é marcada cancelada, as tarefas de ver e marcar-se cancelada. Quando uma tarefa é marcada como concluída, a questão vê-lo e verifica se as outras tarefas são concluídas, etc.

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