MelhorespraticasdesenvolvimentoCF[1]
-
Upload
lindomar-junior -
Category
Documents
-
view
212 -
download
0
description
Transcript of MelhorespraticasdesenvolvimentoCF[1]
-
Melhores prticas para
desenvolvimento em ColdFusion
Correios/DESIN/GEWB
Correios DESIN / GEWB Verso 1.5
1
-
Histrico das Revises
Data Verso Descrio Autor 29/11/2006 1.0 Incluso de exemplos, grficos e dos tpicos:
- No se usa aspas em numerais; - Usar o atributo HINT nos componentes; - Declarar escopo de varivel em arquivos .cfc - Link para a documentao ColdFusion.
Equipe Qualidade (Desun/DSNW)
10/01/2007 1.1 - Incluso do item CFSILENT Equipe Qualidade (Desun/DSNW)
12/01/2007 1.2 - Correo do Exemplo da Declarao do Escopo de varivel dentro de Componente (CFC).
Equipe Qualidade (Desun/DSNW)
17/01/2007 1.3 Incluso de 2 itens.
- Use o atributo OUTPUT das tags CFFUNCTION e CFCOMPONENT como NO ou FALSE.
- CFARGUMENT.
Equipe Qualidade (Desun/DSNW)
13/09/2007 1.4 Incluso do item timeout Equipe Qualidade (Desun/DSNW)
18/10/2007 1.5 Incluso do valor do atributo timeout Equipe Qualidade (Desin/GEWB)
Correios DESIN / GEWB Verso 1.5
2
-
ndice
1. Uso de Cerquilhas ........................................................................................................ 5 Exemplo: .......................................................................................................................... 5
2. Use Escopo de Variveis .............................................................................................. 5 3. Faa cache de consulta sempre que possvel. ............................................................. 6
Exemplos:......................................................................................................................... 6 4. Listas longas de CFELSEIF........................................................................................ 6 5. SQL e COLDFUSION.................................................................................................. 6 6. Uso de CFOUTPUT ao CFLOOP ............................................................................... 7 7. Uso de Listas e Arrays .................................................................................................. 7 8. Uso de CFQUERY........................................................................................................ 7 9. Qual a diferena entre e ? ................................................................................................................................ 8 10. Use sempre o CFAPPLICATION para: .................................................................. 8 11. Quando devemos usar ?....................................................................... 8 12. Qual a diferena entre locks do tipo EXCLUSIVE e do tipo READONLY? ...... 9 13. Utilizando datas no SQL .......................................................................................... 9 14. Execuo de rotinas com espao de tempo definido (CFSCHEDULE) ................ 9 15. Certificando a Consistncia dos Dados ................................................................. 10 16. Checando tempo de execuo do cdigo ............................................................... 10 17. Validao Cliente X Validao Servidor ............................................................... 10 18. Use Stored Procedures ........................................................................................... 11 19. Use .................................................................................... 11
Exemplo: ........................................................................................................................ 11 20. Respeite as palavras reservadas ao SQL ............................................................... 11 21. Nunca assuma a existncia de uma varivel......................................................... 11 22. Use a funo LEN() para testar valores vazios. .................................................... 12
Exemplo: ........................................................................................................................ 12 23. Use a funo CompareNoCase() para comparar duas Strings ............................ 12
Exemplo: ........................................................................................................................ 12 24. Evite usar ASPAS em nmeros.............................................................................. 13
Exemplo: ........................................................................................................................ 13
Correios DESIN / GEWB Verso 1.5
3
-
Correios DESIN / GEWB Verso 1.5
4
25. Evite as seguintes funes: .................................................................................... 13 Incorreto ......................................................................................................... 13
26. Use os atributos HINTS e DisplayName no cfcomponent e cffuncion................ 14 27. No use a funo ParameterExists........................................................................ 14 28. Declare Variveis com o Escopo VAR................................................................... 14
Exemplo: ........................................................................................................................ 14 29. Uso de Comparaes de Forma Booleana ............................................................ 15
Exemplo: ........................................................................................................................ 15 30. Uso da tag CFSILENT........................................................................................... 15
Exemplo: ........................................................................................................................ 15 31. Use o atributo OUTPUT das tag CFFUNCTION e CFCOMPONENT como NO ou FALSE. .......................................................................................................................... 16
Exemplo: ........................................................................................................................ 16 32. CFARGUMENT..................................................................................................... 16
Exemplo: ........................................................................................................................ 17 33. Use o atributo timeout na tag CFQUERY............................................................. 17 34. Link para Documentao ColdFusion MX 7........................................................ 17
-
1. Uso de Cerquilhas
Utilize cerquilhas s quando necessrias. Elas aplicadas incorretamente aumentam o
processamento da pgina.
Exemplo:
(Errado)
(Certo)
2. Use Escopo de Variveis
Utilize sempre o prefixo de variveis. Use, por exemplo, form.teste, em vez de teste,
para reduzir o tempo de processamento que o ColdFusion precisa para avaliar a
varivel. Caso voc no use os prefixos, as variveis sero avaliadas na seguinte
ordem:
1. Function local (UDFs and CFCs only)
2. Arguments
3. Variables (local scope)
4. CGI
5. Cffile
6. URL
7. Form
8. Cookie
9. Client
Obs: Usando o prefixo, voc elimina a possibilidade de conflito de variveis.
Correios DESIN / GEWB Verso 1.5
5
-
3. Faa cache de consulta sempre que possvel.
O cache de consulta permiti recuperar os conjuntos de resultados de consulta da
memria, em vez de requisitar toda vez o banco de dados. Isso pode reduzir
significativamente a quantidade de tempo necessria para retornar um conjunto de
resultados no seu aplicativo. O cache pode ser feito usando a tag CFQUERY e um
destes atributos: CACHEDAFTER ou CACHEDWIDTHIN.
O cache de consulta til nas situaes em que voc precisa executar
repetidamente a mesma consulta para obter um conjunto de resultados que
permanece esttico por um perodo de tempo conhecido.
Exemplos:
- Uma consulta que recupera o preo do fechamento da ao de uma empresa
em um site de Intranet de muito trfego que atualizado uma vez por dia;
- Uma consulta que recupera uma lista de novidades que atualizada uma
vez por dia.
4. Listas longas de CFELSEIF
Se voc deparar com uma longa lista de CFELSEIF o melhor seria fazer o uso do
CFSWITCH. O CFSWITCH pode ser at 7 (sete) vezes mais rpido que CFIF.
5. SQL e COLDFUSION
O SQL e o ColdFusion compartilham muitas funes similares. Muitos dos
desenvolvedores acham mais fcil usar as funes do ColdFusion., mas muito mais
eficiente para o SQL executar essas funes. Existem muitas funes do SQL iguais
s do ColdFusion. Exemplo: UCASE, YEAR e etc.
Correios DESIN / GEWB Verso 1.5
6
-
6. Uso de CFOUTPUT ao CFLOOP
Sempre que possvel prefira o CFOUTPUT ao CFLOOP. O CFLOOP bem
mais lento.
7. Uso de Listas e Arrays
As listas so simples de usar, mas no so rpidas como os arrays. De fato, arrays so
3 vezes mais rpidos que listas. Portanto, prefira-os.
8. Uso de CFQUERY
O CFQUERY existe um parmetro opcional que o NAME. Evite us-lo nas querys
que no possuam retorno (Insert, Delete e Update), para que no crie variveis
desnecessrias de cache ou at mesmo a sobreposio de variveis que j estejam
corretamente no cache.
Correios DESIN / GEWB Verso 1.5
7
-
9. Qual a diferena entre e ?
Pelo lado funcional, nenhuma - eles funcionam exatamente da mesma forma.
IsDefined() retorna YES ou NO (ou true ou false) e se voc no especificar o que
est comparando ColdFusion deduz que voc est checando por YES. Mas se for
pensar em performance, existe sim uma diferena: ao no especificar o comparador
(YES ou NO) voc ter uma performance 10% mais rpida. O mesmo verdadeiro
para qualquer comparao. Se voc puder omitir o valor de comparao, omita.
10. Use sempre o CFAPPLICATION para:
- A manuteno do estado fornecendo um meio de criar variveis de
aplicativo, cliente e sesso;
- A definio das constantes de aplicativo, tais como os nomes de fonte de
dados, os diretrios-fonte e os elementos de estilo;
- O tratamento de erros que ocorrem dentro do seu aplicativo;
- Fornecer mensagens de erro personalizadas;
- O fornecimento de servios de segurana, tais como a autenticao e os
direitos de usurio.
11. Quando devemos usar ?
A funo da tag a de controlar o acesso simultneo de um pedao de
cdigo ou mesmo de um escopo inteiro de varivel. Verses anteriores do
ColdFusion (pr CFMX) tinham uma limitao em que acessos simultneos no
protegidos variveis compartilhadas (como SESSION ou APPLICATION) podiam
resultar em acessos indevidos memria do servidor e, como conseqncia, falha do
mesmo. Isso j no acontece com o ColdFusion MX, porm ainda existem casos
onde devemos usar a tag . Primeiramente qualquer cdigo que no
feito para acesso multi-usurio (tags de terceiros, acesso a arquivos de sistema, etc)
deve ser protegido para garantir o acesso de forma seqenciada (em oposio ao
Correios DESIN / GEWB Verso 1.5
8
-
acesso concorrente). Depois, mesmo que o acesso variveis compartilhadas no
cause problemas no servidor, ele pode causar problemas de inconsistncia na sua
aplicao. Por exemplo, se uma aplicao atualiza um valor de uma varivel do tipo
APPLICATION e o cdigo para esta atualizao no est protegido com o lock,
existe a possibilidade de usurios acessarem valores antigos (ainda no atualizados) e
ao mesmo tempo valores novos (j atualizados). Talvez isso no seja um problema,
dependendo da sua aplicao, porm se isso estiver afetando-a, o caso de usar
.
12. Qual a diferena entre locks do tipo EXCLUSIVE e do tipo READONLY?
suporta dois tipos de locks, EXCLUSIVE e READONLY. Um lock do
tipo EXCLUSIVE protege um bloco de cdigo contra qualquer acesso simultneo. J
um lock do tipo READONLY , na verdade, muito mais uma "flag" que marca se
determinado bloco pode ou no ser executado, dependendo da existncia um lock do
tipo EXCLUSIVE ativo no momento. importante usar o READONLY no seu
cdigo porque sem ele o ColdFusion pode acessar este bloco de cdigo mesmo
quando existir um lock EXCLUSIVE ativo. Isso acontece obviamente porque o
ColdFusion no ter como saber se o bloco pode ou no ser acessado naquele
momento.
13. Utilizando datas no SQL
Todas as vezes que for passar uma data via SQL (utilizando drive ODBC), use a
funo CreateODBCDate() para format-la corretamente. Isso se aplica a todas as
clusulas (INSERT, UPDATE, WHERE, HAVING, etc). O uso desta funo elimina
erros de converso de data.
14. Execuo de rotinas com espao de tempo definido (CFSCHEDULE)
Para executar rotinas com datas pr-marcadas, como por exemplo para limpar um
banco de dados, no utilize . A maioria dos bancos de dados
Correios DESIN / GEWB Verso 1.5
9
-
cliente-servidor suporta o timed execution do SQL e eles faro o trabalho com uma
performance muito superior.
15. Certificando a Consistncia dos Dados
Dados devem ter consistncia. Abreviaes, nmeros de telefone, etc, devem ser
guardados no banco de uma maneira consistente. Sim, muito fcil usar Ucase() e
outras funes para manipular dados, contudo, elas no so eficientes e tampouco
seu cdigo poder ser aproveitado utilizando outro cliente. A maneira correta de
reforar a consistncia dos dados no prprio banco, utilizando triggers ou stored
procedures.
16. Checando tempo de execuo do cdigo
Precisa checar o tempo de execuo de algumas linhas de cdigo? Voc pode faz-lo
utilizando a funo GetTickCount(). Adicione antes do cdigo e no final do cdigo a ser testado. O resultado ser a
diferena entre a varivel fim e a varivel inicio. Com isso voc verificar a
perfomance da sua pgina.
17. Validao Cliente X Validao Servidor
Validaes de formulrio do lado do cliente so timas para os usurios, contudo,
no conte apenas com elas. Browsers antigos, problemas de conexo, opes de
browser desativadas e outras situaes podem fazer com que seu script no seja
executado e sem a execuo do script voc fica sem validao, sendo assim, use
validaes do lado do cliente mas nunca conte apenas com elas faa sempre
validaes do lado do servidor quando submeter o formulrio.
Correios DESIN / GEWB Verso 1.5
1
-
18. Use Stored Procedures
Se o seu banco de dados suporta o uso de stored procedures (e deveria) use-as.
Stored procedures so em sua maioria mais rpidas, mais seguras, alm de muitos
outros benefcios.
19. Use
Sempre que voc utilizar uma varivel ColdFusion em uma expresso de SQL,
passe-a com . Essa tag aumenta a performance.
Exemplo:
select a, b, c
from tabela1
where a =
20. Respeite as palavras reservadas ao SQL
Todas as implementaes do SQL possuem palavras reservadas, palavras que
possuem um significado especial para o banco de dados. Seja bastante cuidadoso e
respeite essas palavras reservadas caso contrrio seu aplicativo comear a fazer
coisas engraadas quando voc menos esperar.
21. Nunca assuma a existncia de uma varivel
Nunca assuma que uma varivel existe, mesmo que voc mesmo tenha escrito o
cdigo que passa a varivel (quem sabe como um parmetro de URL ou um campo
de formulrio). Para sua segurana, use uma lista de tags para
inicializar todas as variveis. Se elas realmente existem a tag ser
ignorada, ou seja, o uso desta tag no tem pontos negativos e traz muitas vantagens.
Correios DESIN / GEWB Verso 1.5
1
-
22. Use a funo LEN() para testar valores vazios.
Quando precisamos testar um valor igual a vazio (nulo), use LEN() ao invs de is
not, eq, neq e is. Vou poder usar LEN(TRIM()) para testar valores que podem
conter espaos.
Exemplo:
Ruim -
tima -
23. Use a funo CompareNoCase() para comparar duas Strings
Quando precisar comparar duas strings, muito mais rpido usar CompareNocase()
ao invs de is, eq, neq ou is not.
Exemplo:
Ruim -
tima -
Correios DESIN / GEWB Verso 1.5
1
-
24. Evite usar ASPAS em nmeros
No use ASPAS ao se referir a nmero.
Exemplo:
Ruim - -
tima -
25. Evite as seguintes funes:
Voc deve evitar as funes listadas abaixo. Tendem a ser lenta, difcil de serem
lidas, ou produzem resultados inesperados. Use outras (ou reescreva simplesmente
seu cdigo para evitar o uso da funo).
EVITE USE
Evaluate() Reescreva o seu cdigo para evitar o uso desta funo
IIF() Incorreto
Resoluo
StructFind() Struct.Key
IncrementValue() Incorreto
Resoluo
SetVariable Incorreto
Resoluo
Correios DESIN / GEWB Verso 1.5
1
-
26. Use os atributos HINTS e DisplayName no cfcomponent e cffuncion
Use os atributos Hint e DisplayName para documentar os seus CFCs e as suas
Functions. Eles auxiliam na documentao.
27. No use a funo ParameterExists
A funo ParameterExists foi retirada na verso CF4. Substitua-a por
IsDefined(variavel).
Exemplo:
Uso incorreto
alguma coisa.
Correto.
alguma coisa.
28. Declare Variveis com o Escopo VAR.
Nos arquivos .cfc use sempre escopo de varivel. Lembrando que as declaraes
das variveis devem ficar logo aps os argumentos. No se esquea de evitar o uso
da tag CFPARAM nos arquivos cfc, pois perde performance.
Exemplo:
#variavel#
Correios DESIN / GEWB Verso 1.5
1
-
29. Uso de Comparaes de Forma Booleana
Exemplo:
Incorreto Soluo
30. Uso da tag CFSILENT
A tag CFSILENT suprime toda a exibio produzida entre os pares da tag CFSILENT. CFSILENT pode suprimir o espao em branco gerado pelas pginas em ColdFusion. A tag deve ser usada quando no necessria nenhuma exibio. Isso tpico em loopings, querys, comentrios, criao de variveis (CFSET, CFPARAM), entre outros.
Exemplo:
Sem o uso do CFSILENT SELECT CAMPO FROM TABELA #variables.i# Tamanho do Arquivo: 4,91 KB
Com o uso do CFSILENT SELECT CAMPO FROM TABELA
Correios DESIN / GEWB Verso 1.5
1
-
#variables.i#
Tamanho do Arquivo: 26 bytes
31. Use o atributo OUTPUT das tag CFFUNCTION e CFCOMPONENT como NO ou FALSE.
Usando o atributo output como No ou False, o ColdFusion faz uso da tag CFSILENT implicitamente. Isso suprime todo o espao em branco gerado pelo CFC.
Exemplo:
32. CFARGUMENT
Sempre informe o atributo TYPE na tag CFARGUMENT. Tente enviar o tipo ANY.
Se o argumento obrigatrio (required=true), no especifique o atributo
DEFAULT.
Se o argumento no obrigatrio, especifique o atributo Default ou o atributo required=false, mas no ambos.
Se voc precisa detectar se um argumento que no obrigatrio foi passado
ou no, use structKeyExists(arguments,"argName") ao invs do atributo DEFAULT=.
Correios DESIN / GEWB Verso 1.5
1
-
Correios DESIN / GEWB Verso 1.5
1
Exemplo:
Errado