tebosoftware:
Como assim errado?
O meu controler controla coisas como o bean ativo, a pesquisa, exclusao, listas pra combo etc.
Isso eerrado?
Antes de mais nada, me desculpe. Preciso tomar mais cuidado antes de dizer que algo está “errado” …
Bom, pela sua descrição, a sua solução se parece mais com um MVP (Model View Presenter) do que um MVC propriamente dito. O MVP é um padrão muito interessante também, eu acho que a compreensão dele mais simples que a do MVC.
Me parece também que você fez uma pequena confusão. Regra de negócio ou lógica de negócio diz respeito somente ao domínio da aplicação e relacionamento entre entidades; Ela fica um nível acima da persistência mas não toma conhecimento sobre como a interface é controlada; Em um MVC, a própria View deve controlar seu estado (me corrijam se eu estiver errado), pois o Controller deveria apenas encaminhar requisições para o Model e devolver as respostas para a View. Já no padrão MVP o Presenter é quem mantem o estado da View, além de fazer a ponte entre Model e View, de forma que o Presenter chama diretamente as interfaces de serviço expostas pelo Model.
Mas enfim, como eu acho que se apegar demais a nomes pode ser improdutivo (não quero que você pense que tudo o que você fez está “errado”), vou só reforçar a minha sugestão:
1 - criar classes de serviços para conter regras de negócios. Serviços seriam métodos que representam 1 regra de negócio completa, ou seja, exatamente 1 transação. A transação deve começar no início do método e terminar no fim do método, fazendo rollback caso tenha alguma exceção. Você poderia receber a conexão via injeção de dependências ou então instanciar diretamente uma fábrica de conexões.
2 - eu avaliaria se as suas classes controller não estão acumulando responsabilidades. Talvez seja esse o caso. Assim, seus controladores ao invés de encaminhar chamadas a DAOs, encaminharia chamadas para serviços. O que eu defendo é que controllers ou presenters não devem preocupar-se com transações.
Espero que seja útil;