Соглашения о кодировании для записи CFC в CF9? - PullRequest
6 голосов
/ 26 августа 2009

С новыми способами написания CFC на CF9, какие соглашения о кодировании являются новыми для CF9?

Вот некоторые из них, которые я могу вспомнить ...

  • всегда используйте ЛОКАЛЬНЫЙ охват
  • всегда включает init() метод, который возвращает сам себя, поскольку New будет вызывать init (), если найден.
  • do not помещает обязательные аргументы в init(), если это объект ORM, в противном случае ожидайте исключения ...
  • всегда используйте THIS.setXXX там, где XXX - это имя свойства внутри init (), чтобы он вызывал неявные установщики или пользовательские установщики, если они доступны.
  • отказаться от соглашения о прицеле до CF8, см .: http://henrylearnstorock.blogspot.com/2009/08/should-we-abandon-instance-scope-in-cf9.html
  • нет выходных данных = false для компонента и функций в стиле CFC сценария, см .: http://www.coldfusionjedi.com/index.cfm/2009/8/26/Ask-a-Jedi-Impact-of-whitespace-and-script-based-CFCs
  • используйте более чистый и эффективный isNull(arguments.optionalArg) вместо isDefined()

Ответы [ 3 ]

2 голосов
/ 26 августа 2009

нам все еще нужно установить атрибут output = false для компонента и функций в стиле сценария CFC?

Я бы так не думал. <cfscript> по своей природе подавляет любые пробелы и нуждается в writeOutput(), чтобы вообще иметь какой-либо вывод.

0 голосов
/ 22 ноября 2012

все функции, которые изменяют данные, должны возвращать некоторое значение, даже если это логическое значение, которое в настоящее время всегда истинно. Функции в конечном итоге должны возвращать false

0 голосов
/ 15 декабря 2011

Ваш метод init () не должен возвращать область «this», если вы вызываете ее с использованием синтаксиса «new my.cfc ()». Правдивая история.

Если вы находитесь внутри cfc и хотите установить свойство, не используйте this.setFoo (), просто перейдите setFoo (). То же самое касается getFoo (). This.xxx () походит на выход из парадной двери только для того, чтобы вернуться. Кроме того, ваши access = private пользовательские методы получения и установки не будут работать, поскольку функции не будут находиться в этой области видимости.

"var foo" против "local.foo" - лично я предпочитаю переменные var'd, так как а) меньше кода для ввода и б) меньше кода для чтения.

// 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 );

Используйте комментарии в стиле javadocs. Документация - твой друг.

/**
* @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;
}
...