Regra de negócio separada

Olá a todos,

Estou tentando desenvolver um projeto onde a regra de negócio fica isolada (como se fosse um projeto separado), tentando de maneira a deixar meu código facilmente utilizável no desktop ou na web.

Estou com algumas dúvidas que não consegui encontrar ou interpretar adequadamente em minhas buscas na web, e gostaria de ouvir algumas opiniões de pessoas experientes :slight_smile:

Exemplo usado:

class Person {
  //codigo aqui
}

interface PersonDAO extends DefaultDAO {
  //codigo aqui
}

class HibernatePersonDAO implements PersonDAO {
 //codigo aqui
}

//classe de negocio
class PersonManager {
     //private dao
     //private transaction?
 
    public addPerson(Person p) {}

    public bool listPerson() {}
}
  1. Como não devo usar nenhum framework web ou desktop, como faço para que meu modelo carregue adequadamente a Implementacao do DAO Genérico ao respectivo banco de dados?

Minha idéia: Utilizar uma factory carregada através de um arquivo XML. Algo parecido com isso aqui: http://jingdao.sourceforge.net/. Mas ainda persiste um problema: como armazenar a instancia dessa factory que seja facilmente acessivel pelos meus objetos do modelo. (Singleton?)

  1. Outro problema que apareceu é como que minhas classes de negócio vao receber o dao e a transaction? elas vao dar um factory.getDAO()? ou há alguma forma de deixar isso dinâmico? (ou seja, se for web, poder usar IoC como no mentawai)

Minha idéia: sem idéia

  1. Sobre a transaction, no caso quem controla elas é o PersonManager certo? dentro de uma action do mentawai eu so vou chamar metodos de personManager, correto?

Minha idéia: sem idéia

Desculpem as dúvidas de iniciante, mas gostaria muito de já começar corretamente …

Obrigado desde já :slight_smile:

[]s

Marcos

Voce não precisa estar em um ambiente WEB para usar IoC… neste caso, algumas de suas dúvidas estão mais claras…

OBS: Não gosto de chamar um DAO de dentro de uma action diretemente. Não coloque regras de negócio dentro do DAO e lembre-se DAO é PERSISTÊNCIA, não regras de negócio.

OBS 2: O que tem a ver a implementação do seu DAO genérico com algum framework WEb ou desktop? pq vc se sente amarrado nisso?

Poste o código um pouco mais claro para a gente poder ajudar mais…

Abraço!

Primeiramente, obrigado por responder :slight_smile:

Sobre isso, gostaria de saber então se existe algum framework ou como posso fazer para ter IoC. vc conhece?

Certo, eu me expressei mail. minha estrutura é baseada no exemplo do mentawai a aplicação MyBooks

Minha estrutura:

Person -> Bean normal que tem construtor sem parametros e getters and setters

PersonManager -> aqui ficam os métodos que criam pessoas, removem pessoas e fazem algumas acoes com ela.

PersonDAO - interface que possui os metodos para persistencia

HibernatePersonDAO - implementacao de persistencia usando hibernate.

Aí, por exemplo, em uma action (web) ou no desktop eu só interagiria com o PersonManager. Porém, PersonManager tem que ter uma instancia do DAO correto e também não sei como controlar a transação ali.

Como fazer para carregar no PersonManager o DAO correto sem ter dependencia a web ou desktop, podendo facilmente em ambos.

Como vocês fazem para armazenar instancias de classes únicas? usa Singleton ? Por exemplo, naquele caso, um dao loader como o jingdao citado acima.

tentei ser mais claro, se não consegui, posto o código.

Você tem alguma indicação de livro, ou link ou até algum exemplo de arquitetura para que eu possa desenvolver projetos reutilizáveis?

Desde já agradeço sua disposição.

[]s

Você pode usar o Spring ou PicoContainer como framework IoC.

Esse artigo é de 2004, se for comparar os dois acesse as versões mais recentes.

http://today.java.net/pub/a/today/2004/02/10/ioc.html