Convenzioni di codifica per scrivere CFC in CF9?
-
20-09-2019 - |
Domanda
Con i nuovi modi di scrivere CFC in CF9, quali sono alcune delle convenzioni di codifica nuove in CF9?
Eccone alcuni che mi vengono in mente...
- utilizzare sempre l'ambito LOCAL
- includere sempre
init()
metodo che restituisce se stesso, poichéNew
chiamerà init() se trovato. - Fare non inserire gli argomenti richiesti
init()
se è un'entità ORM, altrimenti aspettati Eccezioni... - utilizzare sempre
THIS.setXXX
in dove XXX è il nome della proprietà all'interno di init(), in modo che chiamerà i setter impliciti o il setter personalizzato, se disponibile. - abbandonare la convenzione sull'ambito pre-CF8 INSTANCE, vedere: http://henrylearnstorock.blogspot.com/2009/08/should-we-abandon-instance-scope-in-cf9.html
- no output=false per componenti e funzioni in stile script CFC, vedere: http://www.coldfusionjedi.com/index.cfm/2009/8/26/Ask-a-Jedi-Impact-of-whitespace-and-script-based-CFCs
- utilizzare il più pulito e più efficiente
isNull(arguments.optionalArg)
invece diisDefined()
Soluzione
Non abbiamo ancora bisogno di impostare l'attributo di output = false per componenti e funzioni in CFC stile sceneggiatura?
Non ci penserei così. <cfscript>
per sua natura sopprime eventuali spazi vuoti e deve writeOutput()
per avere qualsiasi uscita affatto.
Altri suggerimenti
Il tuo metodo init() non deve restituire l'ambito "this" se lo chiami utilizzando la sintassi "new my.cfc()".Storia vera.
Se sei all'interno di un cfc e vuoi impostare una proprietà, non usare this.setFoo(), vai semplicemente setFoo().Lo stesso vale per getFoo().this.xxx() è come uscire dalla porta principale solo per rientrare.Inoltre, i tuoi getter e setter personalizzati access=private non funzioneranno poiché le funzioni non rientreranno in questo ambito.
"var foo" vs "local.foo" - personalmente, preferisco le variabili var perché c'è a) meno codice da digitare e b) meno codice da leggere.
// 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 );
Utilizza i commenti in stile Javadoc.La documentazione è tua amica.
/**
* @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;
}
tutte le funzioni che alterano i dati dovrebbero restituire un certo valore, anche se si tratta di un valore booleano che è attualmente sempre vero. Le funzioni hanno un modo di fine dover restituire false