Соглашения о кодировании для написания cfc в CF9?

StackOverflow https://stackoverflow.com/questions/1332895

  •  20-09-2019
  •  | 
  •  

Вопрос

Какие новые правила кодирования появились в CF9 благодаря новым способам написания CFC в CF9?

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

  • всегда используйте ЛОКАЛЬНУЮ область видимости
  • всегда включайте init() метод, который возвращает себя, поскольку New вызовет init(), если найдет.
  • делать нет вставьте необходимые аргументы init() если это объект ORM, в противном случае ожидайте исключений...
  • всегда используйте THIS.setXXX где XXX — имя свойства внутри init(), чтобы он вызывал неявные или пользовательские методы установки, если они доступны.
  • отказаться от соглашения об области видимости INSTANCE до 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()
Это было полезно?

Решение

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

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

Другие советы

Ваш метод 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;
}

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top