mausexdd:
Obrigado asaudate e abmpicoli
Pelo que vi vai dar muitooo trampo utilizar o Hibernate , pois como nosso amigo asaudate disse os relacionamentos seriam um grande problema , e não to muito afim de modificar as minhas classes modelo por enquanto , quero arrumar a camada de persistência e manter o sistema funcionando.
Oque acontece é o seguinte , estou planejando expandir algumas funcionalidades do sistema , mais continuar encima da bagunça vai virando uma bola de gato e vai chegar um dia que terei muitos problemas , por isso vejo que a vantagem é organizar e arrumar oque tem que ser arrumado agora.
Cara , este é um assunto que sou completamente leigo , como posso utilizar design patterns para melhorar a arquitetura do meu sistema de forma efetiva e pratica ?
Oque eu pretendo fazer é separar as classes utilizando-se de MVC e conseguir um baixo acoplamento entre minhas classes de persistência .
Pois da Maneira que esta ao persistir Funcionario por exemplo eu tenho acesso total ao metodo persisteProduto e n coisas mais que tenho até medo de falar :shock: .
Comece dando uma olhada no padrão DAO (Data Access Object). É um padrão específico para esse tipo de coisa: abstrair esse tipo de lógica do resto da aplicação. Considere criar uma classe abstrata (GenericDAO, por exemplo). Depois, estenda essa classe para algo um pouco mais específico (JDBCDAO, por exemplo). Essa classe, no caso do seu JDBC, vai conter alguns templates de métodos que são usados em todos os DAO’s JDBC, como abrir conexão, fechar, recuperar resultados de ResultSet, e por aí vai. Deixe essa classe o mais flexível possível para que não seja necessário fazer muito quando você estender ela também (o DAO JDBC deve ser abstrato também). Depois, você faz uma estensão dessa classe por classe de modelo, implementado somente coisas específicas que sejam necessárias por cada classe de modelo.
Depois, ao invés de referenciar diretamente os DAO’s de cada classe de modelo, crie interfaces para eles e referencie essas interfaces, de maneira que você não precise saber que está usando nem um GenericDAO, nem um um JDBC DAO nem nada assim, somente as interfaces do modelo. Assim, quando você substituir o JDBCDAO por um iBatisDAO da vida, você não vai precisar mexer em mais nada.
Se o sistema for muito grande, você pode considerar usar TemplateMethod ou mesmo AbstractFactory para fazer a instância dessas classes. Caso contrário, não é necessário, você muda a maneira de instanciar diretamente nas classes.
Se for interessante, também, você pode usar uma abordagem voltada para o DDD e criar repositórios para cada objeto. Vale lembrar que um Repositório não é um DAO; é um objeto mais voltado para a camada de negócios da aplicação, mas sabe fazer persistência. Ou seja, ele pode conter regras de negócio tranquilamente, porque ele faz parte do domínio da aplicação.
E, por último, mas não menos importante: utilize injeção de dependências, sempre! Não importa se você usa um framework pra isso ou não, mas sempre forneça aos objetos aquilo de que eles vão precisar, nunca faça o lookup diretamente. Isso porque você vai precisar testar essas classes, e testar persistência sem injeção de dependências é praticamente impossível.
Enfim… eu sei que é bastante informação, mas o fórum está aqui sempre que você precisar, OK?
[]'s