GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Problema na execução do programa

c
Tags: #<Tag:0x00007f6536b17888>
#1

Olé Pessoal

Estou com problema na execução do meu programa.
Na regra de negócio as condições está dando erro na parte em negrito abaixo.
O Visual Studio fala Exceção sem tratamento.

public void Inserir(ModeloCliente Modelo)
{
if (Modelo.Nome.Trim().Length == 0)
{
throw new Exception(“O campo Nome é obrigatório”);
}

		DALCliente DALobj = new DALCliente(conexao);
		DALobj.Inserir(Modelo);
	}
0 Likes

#2

Você só pode ter um throw se indicar, de modo explícito, que o método irá lançar essa exceção.
Teu código não possui um throws Exception {

0 Likes

#3

Existem dois tipos de exceptions: checked e unchecked. O RuntimeException e toda exception que herda dele são unchecked. Todos os outros que herda de Exception, incluindo a classe Exception em si, são checked.

A regra é que qualquer checked exception precisa ser tratada de alguma forma, seja envolvendo com um bloco try/catch ou colocando na assinatura do método usando o throws indicando que aquele método pode lançar um uncheked exception.

Você quer obrigar que qualquer pessoa que use esse seu método Inserir trate um possível problema de não passar o nome? Então, coloca throws Exception na assinatura do seu método.

Agora, se você não quer necessariamente que todo mundo se preocupe tanto assim enchendo de try/catch toda vez que for usar o seu método Inserir, então use um unchecked exception, como por exemplo o RuntimeException:

if (Modelo.Nome.Trim().Length == 0)
{
     throw new RuntimeException(“O campo Nome é obrigatório”);
}

Edit: agora que percebi que você citou Visual Studio, então provável que não seja Java. Enfim, mas imagino que a ideia seja parecida no C# também.

0 Likes

#4

Obrigado pelo retorno confuso e darlan_machado.

Estou começando a estudar e a P.O.O. ainda não entrou 100% na cabeça e meu professor deu um projeto pra fazer em camadas(Ele passou um mini projeto como exemplo usando DAL, BLL, Modelo e GUI).
O que eu quero dizer é que eu não estou acostumado com os termos usados e tal.

Eu entendi mais ou menos o que o confuso explicou mas a solução que ele deu não funcionou (Ainda continua o erro).

darlan_machado você disse que eu meu código não possui um throws Excepiton {} e tal.
Eu preciso colocar nos parâmetros do método Inserir? É isso?
Você falou um 1kilo e eu não entendi nada (perdoe-me amigo).

Eu estou fazendo testes no meu programa somente com um campo, o campo nome, fazendo com que a aplicação adicione ele no banco de dados. Até aí deu certo. Na camada de Regra de Negócio eu não consigo bloquear a inserção de campos vazios. No modelo que meu professor passou, está da seguinte forma:

public void Incluir(ModeloSubCategoria Modelo)

    {
        
        if (Modelo.ScatNome.Trim().Length == 0)
        {
            throw new Exception("O nome da subcategoria é obrigatorio");
        }
        if (Modelo.CatCod <=0)
        {
            throw new Exception("O codigo da categoria é obrigatorio");
        }
        DALSubCategoria DALobj = new DALSubCategoria(conexao);
        DALobj.Incluir(Modelo);

Isso me leva a crer que para impedir que o usuário deixei o campo vazio, eu preciso implementar um if com condições parecidas com essas e implementar também a execução de códigos do if acima parte que eu tentei adicionar no meu programa mas dá erro.

0 Likes

#5

Mas o que você fez exatamente? Se o compilador reclama de exceção sem tratamento você deve tratar a exceção (colocar throws na assinatura do método ou usar try/catch). Não tem segredo. E se quiser que lança uma exceção sem precisar tratar é só mudar pra uma unchecked exception, que não precisa ser tratada sempre.

Só pra ter certeza: o código em C#, certo? Não é Java. Tente procurar uma exceção equivalente a RuntimeException do Java.

0 Likes

#6

Cara, todo mundo começa de algum lugar. E, POO não é fácil, mas não é esse bicho de sete cabeças não. Como eu falo há muito tempo: todo nosso contato com o mundo é orientado a objetos, nós apenas não sabemos como fazer essa experiência se refletir em um ambiente computacional.
Não conheço DAL e nem BLL.

Como eu disse acima, eu não conheço DAL/BLL… E não saber não é errado. Errado é não saber e não perguntar.

Não funcionou = o que exatamente? Ainda continua o erro. Qual?

Sim. Veja o exemplo

public void umMetodoQualquer(int x) throws Exception {
    if(x < 10) {
        throw new Exception("Esse valor é menor que 10");
    }
}

O método acima é um método válido java que valida se um número é menor que 10 e, sendo, lança uma exceção. Como o confuso supôs, essa estrutura que você está utilizando parece muito com C#, é nesta linguagem que você está programando?

Onde eu falei isso???

0 Likes

#7

Eu coloquei o RuntimeException no lugar do Exception (Aí deu erro néh. porque não é a mesma linguagem). Pesquisei no Google a equivalência dele em c# e coloquei mas não deu certo.
Nesse site, está falando que não tem checked em c#. Mas ele passa o link da documentação da microsoft com todos os exception(Não sei se são todos mesmo).
E aí deu um bug na cabeça. Descobri que nem sei o que o exception faz. O professor não explica nada dos códigos aí fica difícil. Ele passa um pdf pra gente ver e fazer igual. Mas não estamos aqui por ele e sim para aprender/entender o que acontece nessa Camada de validação.

DAL(Data Access Layer ) é a camada de conexão com o banco. E BLL(Business Logic Layer) é a camada de regra de negócio. Eu penso nela como autenticação de campos.

public void Inserir(ModeloCliente Modelo) {

		if (Modelo.Nome.Trim().Length == 0){
			throw new Exception("O campo Nome é obrigatorio");
		}
		
		DALCliente DALobj = new DALCliente(conexao);
		DALobj.Inserir(Modelo);
	}

o ModeloCliente é meu método que retorna o que eu solicitei na classe de Conexão(Modelo.Nome tipo string). Aí eu comparo se o campo está vazio e coloco o exception pra exibir a mensagem na tela(acho que é isso). E continuo o fluxo de informação mandando para a DALCliente que captura o valor do Modelo.nome e executa o comando de insert into blablabla no banco. Se eu tirar a camada de validação de campos(BLL) funciona perfeitamente.

É uma metáfora.
Você falou 1 quiilo e eu não entendi uma grama.

0 Likes