Соглашения о кодировании для написания cfc в CF9?
-
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