Regras de negócio e estados dinâmicos

Olá Senhores,

Estou com um desafio onde o cenário o agendamento de atividades em um calendário.
Um primeiro modelo fiz os “Tipos de Atividades” encapsuladas em ENUMS onde denotavam os estados daquele determinado tipo de atividade.

O usuário em cima em outro momento notificou a necessidade de inserção de novos tipos de atividades, o que eliminaria o ENUM.

O problema acontece é que cada tipo de atividade detém de Atributos e Regras de negócios específicas.

Por exemplo, uma atividade “Férias”, só pode haver 22 ao ano.

Uma atividade “Lançamento de Despesas”, tem que ter atributos referentes a valor, fazer algumas validações e notificar aos responsáveis.

Percebam que os Tipo de Atividades são mutáveis, alguém tem idéia de como posso gerar um modelo que atenda esses requisitos?

Um forte abraço

Eu acredito que o que você quer é simplesmente herança e polimorfismo (Ferias extends Atividade) mas caso eu esteja errado leia sobre o Strategy.

Nota: isso não é metodologia de desenvolviment, favor postar na seção correta!

OK, gerar um modelo estático seria tranqüilo, (Ferias extends Atividade).

O problema como falei é que o usuário tem que ter a possibilidade de criar novas atividades concretas e também criar as regras delas.

Drools seria interessante, só que não tenho conhecimento se é possível criar regras tão específicas e dinâmicas.

O caso das férias envolve apenas 2 variaveis (Período de tempo e quantidade de dias), mas pense em atividades que possam ter mais variaveis,
logo a descrição da DSL é bem específica.

Pedir pro usuário escrever DSL é inútil quando este não sabe programar. Mas tenho uma idéia.

Você conhece o iTunes? Já viu que ele tem uma “feature” que são as pastas inteligentes? Use esse esquema. Imagino assim:

Quando o usuário cadastra uma Atividade, permita que o usuário crie uma lista de Atributos, onde cada Atributo tem seu nome e seu tipo (Data, Numérico e Alfanumérico).
Depois, permita que o usuário crie uma lista de Regras, onde cada Regra é formado de Atributo (cadastrado na tela anterior), comparador (maior, maior-igual, igual, menor, menor-igual, diferente) e Valor (pode ser um outro atributo ou um literal).

Assim, quando um outro usuário agendar uma atividade, deve carregar campos de acordo com o definido na lista de Atributos, ao preencher, tudo é armazenado num Map, mas antes é feita a validação iterando sobre a lista de Regras.

OK, eu havia planejado algo assim tbm, mas imagine que cada atividade estende de uma atividade abstrata e esta tem um método abstrato “validaAtividade”

Logo todas terão de implementar esse método, mas como poderia pegar esse monte de registro de regras e executar no java?

Um forte abraço!

ola!! rpffoz

bem um modelo interessante,seria criar um objeto atividade assim:

Atividade:
-atributos:um ou mais objetos do tipo atributo contendo,nome, valores e tipo do atributo
-regras: um ou mais objetos do tipo regra contendo scripts numa “dsl” que usuario conheca, e possa altera-la quando quiser

bem é apenas uma ideia, espero que ajude :slight_smile:

abracos

Este é o modelo mais interessante que cheguei, mas medindo o esforço e prazo de projeto, estou pesando em re-negociar este requisito.

Um forte abraço e obrigado pelas dicas.