Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Bruno Augusto

Exception Codes...

Recommended Posts

Pensando lá na frente, quando potencialmente precisarei documentar de forma mais completa o que estou desenvolvendo, gostaria também de poder documentar as Exceptions que me sistema dispara.

 

Algo buscável e que usufrua, também, da reescrita de URL's, como: http://docs.meusistema.com/exception/HEXADECIMAL_AQUI

 

Assim, o meu roteamento pega o valor do parâmetro GET Exception e consulta o correspondente àquela Exception, mostrando detalhes de onde se dispara, porque se dispara e como não fazer disparar.

 

Eu bem poderia usar inteiros normais, afinal 0x0000FFFF nada mais é do 65535. É Exception pra burro. :o

 

Confesso também que não entendo muito de hexadecimais e, em tendo alguma vantagem por detrás do seu uso, eu desconheço, sendo num primeiro momento, apenas elegante.

 

Com isso, queria saber, além da opinião de vocês, se seria viável ou não, um norte para eu iniciar, entendendo melhor como a construção desses valores acontecem, isto é, como por exemplo 0x00000000 chega em 0x0000FFFF, e como definir de forma mais rápida um intervalor para esses códigos, assim não preciso ficar calculando um a um antes de montar as constantes da classe.

 

E com intervalo eu penso algo como:

 

0x00000000 até 0x0000FFFF => Exceptions não específicas

0x00010000 até 0x0001FFFF => Exceptions dentro do primeiro grupo de classes (Application)

0x00020000 até 0x0002FFFF => Exceptions dentro do segundo grupo de classes (Cache)

 

E por aí vai.

 

Seria interessante, também, uma forma de a classe-base das Exceptions (todas derivam dela) ter uma forma de detectar se o código usado por uma classe de Exception filha, está respeitando ou não o seu intervalo, afinal, não é uma coisa que eu decoraria. :P

 

Bom, num primeiro momento seria isso mesmo. Vamos por partes antes que aperte mais o nó antes mesmo de encostar na corda. :lol:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara .. que viagem .. vai ficar igual aos erros do windows ..

 

O programa 0xFFFFFFFF parou de responder 

 

Usar hexadecimais para representar inteiros é bom, alguns dizem que o processamento é mais rápido .. mas para outras pessoas entenderem esses 0x .. é meio complicado, enfim ..

 

E cara, que não me leve a mal, mas quem vai parar pra tentar entender esses códigos seus aí ? imagina num e-commerce , o cara vai concluir a compra, e você mostra lá '0x0FFFFF disparou o erro 0x1111111'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Andrey, ele quer para documentar intermanente a aplicação dele, e não para exibir ao visitante/usuário/consumidor da aplicação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Andrey, ele quer para documentar intermanente a aplicação dele, e não para exibir ao visitante/usuário/consumidor da aplicação.

 

Sim, eu sei .. por isso mesmo .. mas pra que documentar pra ele mesmo ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, eu sei .. por isso mesmo .. mas pra que documentar pra ele mesmo ?

Você nem faz idéia dos lapsos terríveis que me acompanham...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você nem faz idéia dos lapsos terríveis que me acompanham...

Hmmmmmmmmmm, pois é, quem trabalha com muitas bibliotecas ( tem muitas bibliotecas ) escritas por si mesmo, costuma esquecer de algumas coisas ... mas é sempre bom uma documentação sim, só não vejo o porque dos códigos serem hexas .. afinal, é muito melhor você criar um mecanismo de busca, buscando pela mensagem de erro, assim você pode encontrar várias classes que tem erros idênticos, mas causas diferentes ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hi.

 

Meu deus, então deixemos os frameworks e voltemos ao Assembly.

 

Isso é síndrome de desenvolvedor PHP wannabe C++.

Teria algum uso útil se você estivesse salvando até o endereço da memória onde a exception deu, mas com todas as proteções atuais como a ASLR, não há vantagem nenhuma mesmo! LOL

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites
Usar hexadecimais para representar inteiros é bom, alguns dizem que o processamento é mais rápido .. mas para outras pessoas entenderem esses 0x .. é meio complicado, enfim ..

Mais rápido? Não... TUDO é armazenado em binário quando chega no hardware, não importa se foi escrito em hexa, decimal ou octal.

 

Por que utilizamos hexadecimal para representar números?

A representação é mais compacta do que binário, por exemplo:

0FFh = 11111111b

 

Por que não utilizar decimal?

Simples: pq 16 = 2^4, ou seja, 1 dígito hexa equivale a 4 dígitos binários, ao passo que na base 10 não existe uma correspondência direta.

 

Mas eu ainda não entendi a necessidade desse sistema...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas eu ainda não entendi a necessidade desse sistema...

 

Documentação das próprias classes dele, suponha que seja um mini-framework, o qual ele não lembra o que causa X exceção, daí estar em pleno desenvolvimento e se deparar com um erro que ele não lembre a causa, ele consulta a documentação , sakou ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah sim, agora me lembrei que tem uma propriedade $code nas exceções do PHP.

Mas se você vai separar as diferentes exceções geradas no seu cógido, você vai criar subclasses específicas, não?

Exemplo: DbConnectionException, DbQueryException, ControllerException

 

Não seria mais fácil fazer o relacionamento pelo nome da classe do que por um código hexadecimal? :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Documentação das próprias classes dele, suponha que seja um mini-framework, o qual ele não lembra o que causa X exceção, daí estar em pleno desenvolvimento e se deparar com um erro que ele não lembre a causa, ele consulta a documentação , sakou ?

Mais ou menos isso.

 

Como programo só quando tenho tempo livre, os primeiros módulos que fiz, já têm alguns meses.

 

De repente vou usá-lo, seja num projeto, seja em outro módulo que deste dependa, pode dar problema, e toda informação que eu tiver em mãos pode me ajudar.

 

Ah sim, agora me lembrei que tem uma propriedade $code nas exceções do PHP.

Mas se você vai separar as diferentes exceções geradas no seu cógido, você vai criar subclasses específicas, não?

Exemplo: DbConnectionException, DbQueryException, ControllerException

 

Não seria mais fácil fazer o relacionamento pelo nome da classe do que por um código hexadecimal? :P

Eu já faço isso. Dezenas de classes de Exceção filhas de uma única mais elaborada...

 

Meu Exception Handler de desenvolvimento é bem claro quanto a quem disparou o que e onde. Mas o de Produção é personalizável e, com isso, pode não mostrar alguma informação.

 

Com isso, vejo apenas a mensagem, que é o que importa. E nem sempre a mensagem vai ser clara o suficiente para informar qual classe disparou a Exception.

 

Daí, se juntamente com a mensagem vier um código de erro, fica mais fácil de localizar.

 

Pensando no seu comentário, Henrique, eu, de fato, poderia usar apenas números inteiros, afinal, um 0x00000000 nada mais é do que um simples zero.

 

Mas como eu disse, e pode até parecer paranóia, fui mais pelo lado da elegância, do que da funcionalidade em si.

 

Eu implementei aqui, ficou até bem bacana. A parte que deu mais trabalho foi separar os intervalos...

Compartilhar este post


Link para o post
Compartilhar em outros sites
Meu Exception Handler de desenvolvimento é bem claro quanto a quem disparou o que e onde. Mas o de Produção é personalizável e, com isso, pode não mostrar alguma informação.

Sugestão (que eu estou pensando em implementar =]):

Em produção, mantenha um log contendo a informação completa da exceção e apenas mostre a mensagem. Quando algum usuário notar algo e te informar, verifique no log.

Nesse log, você guarda a classe, o excecution trace, a mensagem, etc...

 

Sim, é implicância minha com esse monte de hexadecimal aí... ahsusahsuh

Compartilhar este post


Link para o post
Compartilhar em outros sites

Henrique .. acho que ainda não é isso, ele não exibe exception de cara pro usuário .. com certeza tem um bloco try/catch lá .. é mais pra ele , durante o desenvolvimento, se depare com um erro que ele mesmo desconhece a causa / motivo, ele consulte esse guia ..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sugestão (que eu estou pensando em implementar =]):

Em produção, mantenha um log contendo a informação completa da exceção e apenas mostre a mensagem. Quando algum usuário notar algo e te informar, verifique no log.

Nesse log, você guarda a classe, o excecution trace, a mensagem, etc...

 

Sim, é implicância minha com esse monte de hexadecimal aí... ahsusahsuh

Interessante sua idéia. Tem apenas um pequeno problema de percurso... Ainda não criei o módulo de Log :yay:

 

Henrique .. acho que ainda não é isso, ele não exibe exception de cara pro usuário .. com certeza tem um bloco try/catch lá .. é mais pra ele , durante o desenvolvimento, se depare com um erro que ele mesmo desconhece a causa / motivo, ele consulte esse guia ..

Desconhecer pega mal, parece desleixo. Vamos ficar com "não lembre" que maqueia melhor. :P

 

Resumindo: Posso ter mas é desnecessário, certo? Porém, se eu quiser usar um Exception Code defino ele como inteiro normal e, no pior caso, se eu bater o pé e quiser que ele saia em Hexadecimal, formatá-lo de acordo com o formato (0x%08X, para sprintf)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.