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ística de fazer:1) se Ver…

Leitura obrigatória sobre strings

A maior facilidade das strings do Delphi em relação ao C e C++ é que elas não são baseadas em operações de "baixo nível" com ponteiros. Elas são facilmente quebradas, concatenadas ou copiadas. No caso das cópias, elas podem ser copiadas com performance pois mantém um contador de referências.

Em comparação com as linguagens interpretadas, gerenciadas e com "coletores de lixo" as strings nessas linguagens não são tão performáticas. Cópias de strings não são cópias de referências, mas da string completa mesmo, sem reference counting. Tratando - se de concatenação de strings então, o .Net Framework, até a versão 2.0, que eu saiba, encorajava o uso de StringBuilder em vez de strings dentro de um loop para montar um relatório ou tabela na web, por exemplo. Isso porque ao se concatenar duas strings o .Net Framework cria uma nova string com o conteúdo das duas, destruindo as outras duas, gerando um overhead.

Imagine quantas operações dentro de um loop não acontecem quando você faz um:

tabela += "<tr><td>" + col1 + "</td> <td>"+ col2+ "</td></tr>";

Só nesse trecho, bobinho e trivial, mas apenas um exemplo, foram concatenados 5 strings. Isso quer dizer que 5 "resultados" foram criados até chegar ao final, e que, duas a duas, de 5 a 10 strings foram marcadas para ser destruídas, pelo menos as constantes, excetuando-se as variáveis col1 e col2.

O simples fato de trocar o conteúdo de uma string gera a destruição da string atual e a criação de outra no .Net. O programador final não percebe isso porque a sintaxe é bastante "amigável" e para strings e loops pequenos realmente parece que o .Net é performático. Isso não acontece no Delphi.

Algumas leituras obrigatórias sobre strings:

Marco Cantu compara as strings do Delphi com outras linguagens, tanto no que tange à sintaxe como à performance. -->  http://blog.marcocantu.com/blog/delphi_super_duper_strings.html

Meu artigo sobre strings --> http://blog.vitorrubio.com.br/2010/08/strings-e-delphi-2010-na-clube-delphi.html

Paper na Embarcadero sobre Unicode --> http://www.embarcadero.com/images/dm/technical-papers/delphi-unicode-migration.pdf

Artigo DrBob sobre strings --> http://www.drbob42.com/examines/examinA7.htm

Artigo na Embarcadero --> http://edn.embarcadero.com/article/38437

O que eu mais gosto é este: breve história sobre as strings no Delphi --> http://www.codexterity.com/delphistrings.htm


Have Fun ;)

Comentários

Postagens mais visitadas deste blog

Detectar o encoding de um arquivo para não corromper ao transformá-lo

erro "ora-12154: tns: não foi possível resolver o identificador de conexão especificado"

Factory Reset do Samsung Galaxy S