Boa tarde pessoal,
A primeira seção explica a minha situação. A segunda corresponde a minha pergunta.
Situação atual
Estou desenvolvendo um sistema SWING onde, devido ao crescimento e aumento das necessidades, deixou de ser um programa básico de consulta e se tornará um sistema de gerenciamento com escopo muito maior e mais complexo.
O sistema é de duas camadas: a camada de apresentação e a de persistência. A camada de negócios está embutida na de persistência e algumas poucas vezes embutida na camada de apresentação (eu sei, fiz cagada :thumbdown: mas porquê só comecei a conhecer essa arquitetura agora ).
Está conforme o esquema abaixo:
USUÁRIO <-> CAMADA DE APRESENTAÇÃO <-> (CAMADA DE PERSISTÊNCIA + LÓGICA DO NEGÓCIO)
Quando o usuário requisita uma operação, a interface (camada de apresentação) faz:
[list]Cria uma Thread para executar a operação e os próximos passos ocorrem dentro dela;[/list]
[list]Instancia um DAO que será responsável pela lógica de negócios e a camada de persistência;[/list]
[list]O DAO recebe os valores da interface e executa a operação;[/list]
[list]Crio uma thread que a cada meio segundo, consulta o andamento do status no DAO e atualiza a interface do usuário;[/list]
[list]Através da camada da interface, após execução da lógica e persistência pelo DAO, informo se a operação ocorreu com sucesso. Recollho as exceções na camada da interface.[/list]
Alguns conceitos acima estão corretos, mas sinto uma dificuldade grande de trabalhar com essa arquitetura, devido a mistura: (CAMADA DE PERSISTÊNCIA + LÓGICA DO NEGÓCIO).
Por isso, comecei o processo de migração para 3 camadas… criei uma interface para representar os serviços, em nível superior, para ir controlando a migração.
Dúvidas
Tenho dúvidas sobre como devo gerenciar e controlar interrupções de operações de processos longos.
[list]O que devo fazer quando o usuário requisita a interrupção de uma operação de uma classe de Serviço? [/list]
[list]Qual é o melhor jeito de controlar a operação, seu retorno a interface do usuário e sua interrupção? Onde esse controle deve ser feito?[/list]
[list]Que tipos de validações devo fazer e de que forma devo interromper o processo? No DAO, lançando uma exceção, por exemplo? [/list]
Que metodologias vocês usam para fazer esse controle de processos longos? Que envolvam operações complexas e muitos métodos executados?

