Postagens

6 maneiras de fazer a mesma coisa, o que é considerado boas práticas?

As vezes tem tantas maneiras diferentes de fazer o mesmo código que nós ficamos na dúvida quanto a qual maneira usar. O que seria considerado "boa prática" pela comunidade e o que sua equipe entenderia melhor. Suponhamos que você esteja trabalhando dentro de um método de um Domain Service chamado UmDomainServiceChique(objetoDoDominio) que será chamado por uma API. Você tem uma regra de negócio chique para ser verificada que por enquanto chamarei de VerificaMinhaRegraChiqueComplexa(). Você chama UmDomainServiceChique(objetoDoDominio) e caso VerificaMinhaRegraChiqueComplexa() retorne true você vai querer que UmDomainServiceChique faça o que tem que fazer e a api retornar Ok 200, caso contrário você quer que a API responda um erro qualquer, tipo BadRequest, e retornar uma mensagem dizendo que VerificaMinhaRegraChiqueComplexa deu ruim. Eu vejo 6 maneiras de fazer isso, gostaria de saber a opinião de outrs devs sobre qual seria a maneira menos gambiarr...

Method Error 500 - Maximum Length Exceeded with AJAX web service call

Eu estava codificando um  clássico formulário de cadastro, e resolvi usar Cascading Dropdown do Ajax Control Toolkit para a seleção de Estados e Cidades. O conceito é simples: ao selecionar um Estado no ddlEstados o ddlCidades será populado apenas com as cidades desse estado. O problema se manifestou da seguinte forma: para os estados que continham mais cidades, como MG, o ddlCidades era populado apenas com a mensagem "Method Error 500", porém essa não era uma exception disparada, e não era possível debugar o projeto e encontrar o disparo da exception. (Talvez se eu usasse o source do Ajax Control Toolkit em vez da biblioteca compílada seria possível debugar). Tudo indicava que a exception estava sendo tratada, e no tratamento ela escrevia esse erro 500 nos itens. Esse problema é causado porque existe um limite máximo de itens JSON que uma página pode mandar ou receber. Para alterar esse valor deve-se acrescentar as seguintes linhas no web.config: ...

Empregos DEV - Lá e de volta outra vez!

Pois é pessoAll, Saudades de vocês .... mais ou menos Passei uns bons 3 ou 4 meses sem postar nada (e com minha vida digital totalmente jogada às traças). Para me desculpar com meus (poucos) leitroes: é que eu fui demitido. Sim, é frustrante, e pode acontecer com qualquer um. Só que eu fui demitido em uma época em que além de uma fatura medonha de cartão de crédito eu tinha (e ainda tenho) um TCC da pós graduação para fazer. Fiquei os 45 primeiros dias fazendo de 2 a 3 entrevistas por dia durante o dia, e a noite me candidatanto a TODAS as vagas possíveis. Depois entrei em uma empresa chamada Lider Telecom, que presta serviço para a Telefônica (sim, eu me tornei aquilo que mais odeio na minha vida , e todo dia me auto flagelo com uma agulha de tricô incandescente direto no fígado.) Nessa empresa tenho que entrar as 8:00, sair as 18:00 todo dia, sem horário flexível, sem atrasos, sem carnaval, com hora extra na conta do abreu e .... já entendeu né? Sem contar que a empresa f...

Formatando datas no SQL e no C#

Muitas vezes é necessário exibir datas em um determinado formato no GridView. Muitos programadores convertem a data para o formato desejado já na consulta SQL ou procedure. Isso não está correto por uma série de motivos, entre os quais podemos citar: 1) A responsabilidade de formatar a data deve ser totalmente da view, ou seja, da camada de apresentação. 2) Datas formatadas pelo SQL não são mais datas, são varchars, e não podem ser ordenados como datas. 3) Trazendo sempre a data integral do banco de dados pode-se fazer qualquer operação desejada com ela. Veja o link abaixo para tirar qualquer dúvida que você possa ter a respeito. http://weblogs.sqlteam.com/jeffs/archive/2007/04/13/format-date-sql-server.aspx Dito isso, algumas considerações interessantes: Para formatar strings diretamente em uma GridView adicione a coluna (bound column) e defina um valor para a propriedade DataFormatString: <asp:BoundField DataField="Data" DataFormatString="{0:dd/MM/yyyy...

Factory Reset do Samsung Galaxy S

Neste endereço  http://www.clangsm.com.br/vb/android-os/9802-aparelhos-android-hard-reset.html  também há um procedimento para resetar o Galaxy S e apagar tudo, servindo para desbloqueá-lo. Reproduzindo: Para hard reset seu Samsung I9000 Galaxy S: 1. Desligue o aparelho. Se o seu celular Samsung Galaxy S está congelado, retire a bateria e recoloque-a. 2. Segure o botão Diminuir Volume. 3. Pressione e solte o botão Power. 4. Você está agora confrontado com um menu que permite Fastbook, recuperação Clear Storage, e Simlock. 5. Selecione Clear Storage, pressionando o botão Diminuir Volume. 6. Pressione e solte o botão Power. 7. Agora, basta confirmar a sua decisão: Volume para cima para confirmar e Volume para baixo para negar a ação. Se SIM for selecionada, todos os dados, incluindo aplicações de terceiros serão apagados do seu Samsung I9000 Galaxy S. Uma vez que a limpeza for concluída, o telefone irá reiniciar a suas configurações de fábrica. ou -Botão do volume para cima+b...

Criando um lookup que chame uma de suas forms

Um leitor deu a dica de fazer um lookup que chame uma das forms do projeto. Há várias maneiras de se fazer isso, mas uma que encontrei foi usar formulários registrados com RegisterClass. Depois é só usar FindClass para encontrar o formulário, e FindComponent para encontrar o componente onde reside o valor a ser trazido. Se o componente for um TPersistentField, melhor ainda. Ele pode ser achado, e com um typecast para TField seu valor (o valor encontrado e escolhido no formulario de procura/cadastro padrão) pode ser trazido para o keyvalue. Abaixo um exemplo de como isso pode ser feito. Primeiro o registro do formulario: initialization RegisterClass(TfrmConsulta); Depois a chamada dele. Repare que ele é desconhecido para o formulário principal: não está no uses. procedure TfrmPrincipal.Button1Click(Sender: TObject); var NewFormClass: TFormClass; NewForm: TForm; begin NewFormClass := TFormClass(FindClass( 'TFrmConsulta' )); //detalhe: esse string 'TFrmConsu...

Bancos de dados gratuitos parte 2

Imagem
Saiu na Clube Delphi 132 a parte 2 do artigo sobre bancos de dados gratuitos . Espero que todos gostem. Esta edição ainda traz um artigo sobre Nota Fiscal Eletrônica 2.0, muito útil. Não se esqueça que agora os códigos GTIN (códigos de barra a serem preenchidos nos campos cEAN e cEANTrib) agora são obrigatórios. Um artigo que eu lerei com bastante curiosidade é o artigo sobre Morfik, que permite desenvolvimento par Web com Object Pascal, semelhante ao Delphi. Mas com o Morfik você também desenvolve código "client-side". Espero que todos tenham boa leitura!

Artigos sobre bancos de dados gratuitos e lookups

Imagem
Saiu na revista Clube Delphi 131 dois artigos meus: um sobre bancos de dados gratuitos e outro sobre a criação de um componente lookup genérico . Lokups são campos utilizados para fazer a ligação entre duas entidades, duas tabelas. Em uma tabela de venda, por exemplo, há informações sobre o código do cliente para quem a venda está sendo feita, o código da forma de pagamento, e assim por diante. Um formulário não deve ter campos para se digitar os códigos diretamente, e sim campos lookup, que possam ser usados para procurar a forma de pagamento, o cliente e as outras informações em questão pelo nome e não pelo código. Neste artigo fizemos um lookup, usando um ButtonedEdit e um formulário com grid,  que pode funcionar em múltiplos bancos de dados e que traz os registros filtrando-os, usando para isso uma instrução SQL montada sob demanda. Isso ajuda a diminuir o tempo de abertura dos formulários e o tempo de carregamento dos lookups, bem como a quantidade de registros trazida n...