Página Inicial do Fórum > Design Patterns, UML e Arquitetura

Framework para Regras de Negócio



Criar novo tópico   Responder tópico


  1. staroski
    Posts:3369


    Comment Arrow

    Publicado em: 12/07/2011 16:02:48

    O framework que desenvolvi foi baseado num design pattern chamado Specification">http://martinfowler.com/apsupp/spec.pdf"">Specification criado por Martin">http://martinfowler.com/"">Martin Fowler.

    O framework consiste de uma classe utilitária chamada Rule e uma interface chamada Specification.

    Para definir uma regra de negócio, voce implementa a interface Specification. Com sua implementação pronta, você cria uma instância de Rule passando a sua regra de negócio (implementação de Specification) como parametro.

    Veja o exemplo para entender como utilizar a classe Rule e a interface Specification para aplicar regras de negócio numa classe hipotetica Pessoa.

    Uma Pessoa tem os seguintes atributos: nome, idade e sexo.
    Para validar uma Pessoa, foram definidas as seguintes regras:
    - O nome não pode ser null e deve começar com uma letra maiúscula e ter uma ou mais letras minúsculas;
    - A idade não pode ser negativa;
    - O sexo só pode ser 'M' ou 'F'.

    Primeiro definimos a classe Pessoa conforme abaixo:




    Agora criamos três especificações distintas para as regras que validam nome, idade e sexo da Pessoa.








    Agora ja temos a classe Pessoa e as especificações das regras para nome, idade e sexo criadas.
    Podemos então utilizar a classe Rule para validar instancias de Pessoa de diversas formas, por exemplo:







    Abaixo estão os dois fontes que compões o FrameWork




    _________________
    Ricardo Artur Staroski, OCP-JP
    Blumenau - SC




  1. simu
    Posts:9416


    Comment Arrow

    Publicado em: 12/07/2011 17:27:10

    Boa idéia!
    Muito útil!

    mas achei um erro no exemplo:

    acho que deveria ser:

    [[]]
    _________________
      Nome real: Carlos F. Heuberger

    Removeram os meus direitos de administrador e moderador - sem aviso, pela segunda vez - contate o ombudsman (?), a equipejavafree ou a "alta gerência" se necessário - Que pena... que terminou dessa maneira!

    "The mod javafree deserves, but not the one it needs right now."
    --------------------
    Não leio nem respondo MPs!
    This posting is provided AS IS with no warranties and confers no rights.




  1. staroski
    Posts:3369


    Comment Arrow

    Publicado em: 12/07/2011 16:02:48

    É verdade Simu, já corrigi.

    Isso aconteceu porque eu simplesmente copiei o meu JavaDoc, colei aqui no fórum e fui adequando com tags bb onde necessario.

    E no JavaDoc não tem o prefixo 'regraDo' nas instancias de Rule.

    Obrigado pela ajuda!
    _________________
    Ricardo Artur Staroski, OCP-JP
    Blumenau - SC




  1. staroski
    Posts:3369


    Comment Arrow

    Publicado em: 12/07/2011 16:02:48

    simu
    Boa idéia! Muito útil!


    Sim, amigos meus que usam bastante TDD disseram que facilitou muito a vida deles.

    Acho bacana que dá pra criar repositórios de regras de negócio sem depender de maquinas de inferencia pesadas como o Drools.">http://www.jboss.org/drools"">Drools.
    _________________
    Ricardo Artur Staroski, OCP-JP
    Blumenau - SC




  1. jesuino
    Posts:1953


    Comment Arrow

    Publicado em: 12/07/2011 18:38:34

    staroski
    simu
    Boa idéia! Muito útil!


    Sim, amigos meus que usam bastante TDD disseram que facilitou muito a vida deles.

    Acho bacana que dá pra criar repositórios de regras de negócio sem depender de maquinas de inferencia pesadas como o Drools.">http://www.jboss.org/drools"">Drools.


    Impressionado! Marquei para ler mais a fundo mais tarde.
    _________________
    William Antônio Siqueira
    Siga-me no Twitter - Tudo sobre JavaFX e um pouco mais
    Veja meu Blog
    Aprendendo JavaFX




  1. staroski
    Posts:3369


    Comment Arrow

    Publicado em: 12/07/2011 16:02:48

    simu
    Boa idéia! Muito útil!


    jesuino
    Impressionado! Marquei para ler mais a fundo mais tarde.


    É, só quem realmente entende de desenvovlimento orientado a objetos para elogiar.

    Agora vou lhes contar uma história, ano passado apresentei esta solução para resolver os seguintes problemas de um projeto:
    - Acabar com o código repetido das regras de negócio que estavam implementadas em varios metodos private;
    - Permitir que sejam implementados os testes unitários das regras de negócio;
    - Permitir que em determinadas situações so fossem analisadas algumas regras e em outras situações mais regras;

    Sabem o resultado?
    - Os analistas e responsaveis pelos testes do sistema aprovaram de imediato.
    - O gerente do projeto achou interessante, embora não tenha compreendido por não ter o conhecimento necessário de POO e de Java.
    - E o melhor fica para o final: O arquiteto rejeitou a solução pois "é muito complicado usar o método 'isSatisfiedBy' da classe 'Rule' e não ha problema em duplicar o codigo de regras de negócio em métodos private"

    Resumindo, hoje esse projeto não tem reaproveitamento dessas regras de negócio nem testes unitarios, é cada um por si repetindo o mesmo código em métodos private...

    Decepcionante, mas, a vida continua...
    _________________
    Ricardo Artur Staroski, OCP-JP
    Blumenau - SC




  1. simu
    Posts:9416


    Comment Arrow

    Publicado em: 12/07/2011 17:27:10

    staroski

    [...]
    Sabem o resultado?
    - Os analistas e responsaveis pelos testes do sistema aprovaram de imediato.
    - O gerente do projeto achou interessante, embora não tenha compreendido por não ter o conhecimento necessário de POO e de Java.
    - E o melhor fica para o final: O arquiteto rejeitou a solução pois "é muito complicado usar o método 'isSatisfiedBy' da classe 'Rule' e não ha problema em duplicar o codigo de regras de negócio em métodos private"

    Resumindo, hoje esse projeto não tem reaproveitamento dessas regras de negócio nem testes unitarios, é cada um por si repetindo o mesmo código em métodos private...

    Decepcionante, mas, a vida continua...


    déjà vu!!!
    Lembra um pouco a empresa onde trabalho [:-(

    bem triste, uma solução simples, fácil de entender e implementar (Framework com apenas 2 classes!), aceita pelos 'usuários, mas mesmo assim bloqueado por alguém que nem vai ser afetado diretamente...

    [[]]
    _________________
      Nome real: Carlos F. Heuberger

    Removeram os meus direitos de administrador e moderador - sem aviso, pela segunda vez - contate o ombudsman (?), a equipejavafree ou a "alta gerência" se necessário - Que pena... que terminou dessa maneira!

    "The mod javafree deserves, but not the one it needs right now."
    --------------------
    Não leio nem respondo MPs!
    This posting is provided AS IS with no warranties and confers no rights.




  1. sekkuar
    Posts:5998


    Comment Arrow

    Publicado em: 13/07/2011 10:14:37

    staroski

    - E o melhor fica para o final: O arquiteto rejeitou a solução pois "é muito complicado usar o método 'isSatisfiedBy' da classe 'Rule' e não ha problema em duplicar o codigo de regras de negócio em métodos private"




    ahahahah


    tem que rir pra não chorar de uma coisa dessas XD
    _________________
    Sekkuar ~ Ex-Catador Executivo do Javafree - (Não mais) Catando os tópico tudo.
    "The mod javafree deserves, but not the one it needs right now."


    Stack Traces existem pra ajudar e não para trazer uma mensagem de satã dizendo que seu computador será destruído.


    Peça seu Código Pronto para o seu Dever de Casa aqui
    You acknowledge that this software is not designed, licensed or intended for use in the design, construction, operation or maintenance of any nuclear facility.




  1. Relacionados





Novo tópico   Responder tópico     Índice do forum -> Design Patterns, UML e Arquitetura