MESSAGEBOX EM DLL REGRA DE NEGOCIOS

LUIS.HERRERA 13/05/2013 18:18:25
#423401
Estou com uma Dúvida e Problema:

Tenho a classe BLL que faz as validações (seguindo a OOP). O problema é que tenho uma validação que faz alguns testes, e conforme o resultado tenho de pegar a confirmação do usuário através de um MessageBox. O problema é que nas DLLs não tem como incluir a MessageBox, ao menos não estou conseguindo.

Já inclui o using System.Windows.Forms (mas ele diz que não existe Windows no namespace System).
Já tentei incluir uma referência System. Winodws.Forms nas referências da classe BLL, mas mesmo assim o using não é aceito.

Se não é possível usar MessageBox dentro de DLL, como eu poderia fazer a validação da regra de negócios e solicitar confirmação do usuário, para se autorizar, mandar gravar pela DAL e se foi um erro e tem que corrigir, dar um Throw e devolver ao formulário?

Ex: Tenho um número de revisão que inicia em Zero (0). Porém pode existir um registro que já inicia em algum número, porque ele é anterior ao uso do meu sistema, Assim a entrada é livre. Porém o correto é incrementar de um em um, mas o usuário pode entrar no registro para editar e não incrementar, já que pode cometer um erro e ter de corrigir sem mudar o número da versão. Agora se ele entrar um número errado, então tem de poder corrigir. Com isso pode pular números, mas o sistema tem de alertar por segurança, para ele confirmar se é isso mesmo ou se foi um erro e corrigir. Esse é o problema, pois se as regras do negócio não podem ficar na Interface, como questionar o usuário na BLL?
KERPLUNK 13/05/2013 18:47:13
#423404
Crie exceptions personalizadas. Quando a condição da exception ocorrer, lance esta exception para as camadas anteriores, capturando-a no seu form. No form, capture a exception personalizada e exiba a pergunta/mensagem correspondente e chame o método correspondente para continuar a operação. Se necessário, você pode devolver na exceção interna qualquer objeto que seja necessário para continuar a operação.
LUIS.HERRERA 14/05/2013 08:19:00
#423420
Neste caso não funcionará, pois só preciso de uma confirmação do usuário para ter ciência de que um determinado dado a ser gravado é correto. Mas se devolver para camada Interface e realizar essa pergunta pela exeption, fará a rotina ficar em loop, pois ao chamar a DAL novamente, irá realizar outra vez a validação, e assim sucessivamente sem gravar o registro, independente da resposta ser sim ou não pelo usuário.

Tetei uma [Ô]Gambiarra[Ô], mas não funcionou também. Criei uma função no form que seria chamada pela camada DAL e retornaria True ou False, pela resposta do usuário. Mas pela DAL não tenho acesso de modo algum aos forms.

Situação estranha, pois se toda validação deve ser feita na classe negócios, e deixar o front end totalmente independente, esse tipo de situação, que não é difícil de ocorrer, impede essa prática obrigando que o front and fique sim de alguma forma com algumas validações.

Vou tentar mais uma gambiarra: Fazer a exception devolver ao form e realizar a pergunta, se o usuário clicar em SIm (dados ok) então chamo a DAL novamente e agora usando um outro parâmetro como False para que não faça a verificação, ou seja, usar um parâmetro padrão como true e ao retornar a resposta muda para false e se o usuário clicar em Não (dados incorretos) aborta a gravação para corrigir. Acho que isso deve funcionar.
KERPLUNK 14/05/2013 08:40:18
#423422
Resposta escolhida
Acho que você não entendeu. Você terá dois ou mais métodos, um que faz a validação e gravação normalmente. Se caso uma dessas verificações depender da ação do usuário, você dispara a exceção, espera ação do usuário e essa ação, vai chamar um outro método.
Outra alternativa, é um método que executa todas as verificações antes de realmente gravar. Fazendo essas verificações, as ações do usuário são pedidas e então finalmente com as decisões do usuário e os dados já verificados, você faz a gravação.
LUIS.HERRERA 14/05/2013 09:31:51
#423430
Agora entendi.
Obrigado.
Tópico encerrado , respostas não são mais permitidas