Convenções de codificação para a escrita do cfc em CF9?
-
20-09-2019 - |
Pergunta
Com as novas maneiras de escrever CFC em CF9, quais são algumas das convenções de codificação novo para CF9?
Aqui estão alguns que eu posso pensar ...
- use sempre escopo LOCAL
- sempre incluir método
init()
que se retornos, uma vezNew
vai chamar init (), se for encontrado. - do não colocar argumentos necessários em
init()
se é uma entidade ORM, caso contrário esperar Exceções ... - use sempre
THIS.setXXX
em que XXX é o nome da propriedade dentro init (), de modo que ele irá chamar os setters implícitos ou setter personalizado se disponível. - abandonar a convenção âmbito pré-CF8 INSTÂNCIA, consulte: http://henrylearnstorock.blogspot.com/2009/08/should-we-abandon-instance-scope-in-cf9.html
- nenhuma saída = false para componentes e funções no script CFC estilo, consulte: http://www.coldfusionjedi.com/index.cfm/2009/8/26/Ask-a-Jedi-Impact-of- espaço em branco-e-script-based-CFCs
- usar o
isNull(arguments.optionalArg)
mais limpas e eficientes em vez deisDefined()
Solução
que ainda precisamos conjunto de saída atributo = false para componentes e funções no CFC estilo do roteiro?
Eu não penso assim. <cfscript>
por sua natureza suprime qualquer espaço em branco e precisa writeOutput()
a fim de ter qualquer saída em tudo.
Outras dicas
Seu método init () não tem que devolver o "presente" escopo se você está chamando-o usando o "novo my.cfc ()" sintaxe. Verdadeira história.
Se você estiver dentro de um cfc e quer definir uma propriedade, this.setFoo uso Não (), basta ir setFoo (). O mesmo vale para getFoo (). O this.xxx () é como sair pela porta da frente só para voltar. Além disso, o seu acesso = getters personalizados privadas e setters não vai funcionar como as funções não vão estar no neste âmbito.
"var foo" vs "local.foo." - Pessoalmente, eu prefiro variáveis ??var'd como há um) menos código para o tipo e b) menos código para ler
// there isnt a huge difference here
var today = now();
var tomorrow = dateAdd( 'd', 1, today );
local.today = now();
local.tomorrow = dateAdd( 'd', 1, local.today );
// but when you start getting more complex examples, it quickly blows out
var out = method( var1, var2, var3, var4, var5 );
local.out = method( local.var1, local.var2, local.var3, local.var4, local.var5 );
Use javadocs comentários de estilo. A documentação é seu amigo.
/**
* @hint This is a hint for the whole function
* @arg1 This is an argument hint
* @arg2 This is another argument hint
**/
public void function myFunction( string arg1 = 'default', boolean arg2 ) {
return true;
}
todas as funções que os dados alter deve retornar algum valor, mesmo que seja um booleano que é atualmente sempre é verdade. Funções têm uma maneira de, eventualmente, a necessidade de retornar false