ColdFusion компоненты в ColdFusion MX 6.1

В версии ColdFusion MX 6.1 повышена скорость работы, усовершенствован тег cfmail, а также много других улучшений. Однако, одним из наиболее важных улучшений являются исправленные "глюки" и усовершенствования в компонентах. В этой статье речь пойдет как о наиболее значительных исправлениях "глюков", так и о некоторых новых возможностях компонент, поддерживаемых ColdFusion MX 6.1. Кроме того, вам будет продемонстрирована функция isRedSky, с помощью которой вы будете уверены, что ваши компоненты отрабатываются именно под ColdFusion MX 6.1.

Начнем с рассмотрения исправленных "глюков".

 

Использование include’ов внутри методов компонент

Представьте что ваша компонента очень большая. Вы решили «разбить» файл, вынося некоторые наиболее большие методы в отдельные файлы. Однако, вы тут же сталкиваетесь не неприятностью, пытаясь использовать аргументы. Иными словами, если метод компоненты принимает два аргумента (name и age), то они не будут доступны внутри include’a. Ото один из недостатков, исправленных в ColdFusion MX 6.1. Однако тут кое-что нужно запомнить. Переместим большую часть своего кода во включаемый файл, теги cfargument, выражения var, теги cfreturn должны быть в главном шаблоне компоненты, как показано в первом примере кода.

Пример кода 1:

 

Глюк "Содержимое страницы"

Этот так называемый глюк "содержимое страницы" пожалуй лучшая корректировка в компонентах, т.к. многих CF разработчиков заставлял расстраиваться. Этот глюк сложно отследить отладчиком из-за своей странности. Чтобы увидеть этот недостаток в действии, давайте посмотрим на простую компоненту во втором примере кода:

Пример кода 2:

В этой компоненте есть только один метод dump, который отрабатывает тег cfdump для отображения структуры контейнера this и тег cfdump, который отображает результат функции GetMetaData(), примененной к контейнеру this. Обратите внимание, что эти теги выводят информацию напрямую, вместо использования тега cfreturn. Обычно компонента может содержать множество и других методов. Третий пример кода показывает, как мы можем использовать такую компоненту.

Пример кода 3:
Если вы запустите эту компоненту под ColdFusion MX 6.1, то произойдет нечто интересное. После первого запуска кода все отработается превосходно. После второго запуска ничего не будет показано. Вы не получите ни ошибку, ни информацию. Этот глюк многих повергал в недоумение, но теперь исправлен.

Еще один исправленный недочет – это компонента, использующая контейнер application. Возможно вы скажите, что во втором примере кода уже без проблем был использован контейнер application. Но там было показано, что компонента находится в контейнере application. В этом нет ничего сверхъестественного, т.к. компоненте все равно, где находится. Мы же говорим о компоненте, которая внутри себя ссылается на контейнер application. Например, компонента внутри себя осуществляет запрос к базе данных и ссылается на переменную application.dsn, чтобы узнать имя источника данных. Этот метод породит ошибку, как показано в третьем примере кода. Компонента просто теряет доступ как к контейнеру application, так и к возможности напрямую выводить информацию тегом cfdump.

Все это звучит неприятно, но важно то, что эти недостатки исчезли в ColdFusion MX 6.1.

Итак, мы рассмотрели два исправленных недочета компонент, но также исправлены недочеты использования тегов cftransaction вокруг компонент и использования контейнеров variables внутри компонент. Теперь давайте коснемся новых возможностей.

 

Это птица! Это самолет! Это супер метод!

Одна из самых крутых возможностей компонент – это поддержка super(). Те, кто имеют опыт в Java программировании или знакомы с объектной ориентированностью, сразу поймут что это значит. Для тех, кто не знаком с этим, давай рассмотрим простой пример. Представьте, что у вас есть компонента для ваших продуктов - Products. Один из методов создает цену для продукта. Это не так просто, как возвращение значения цены для определенного наименования. На самом деле метод учитывает налоговые и прочие накрутки. Этот метод называется getPrice().

Теперь рассмотрим другую компоненту - Book, которая расширяет возможности компоненты для продуктов. Одно из отличий компоненты Book от компоненты Products заключается в разном способе составления цены, но не на много разном. Мы хотим использовать ту же формулу, которую использует компонента Products, но потом результат немного изменим. До версии MX 6.1 нам пришлось бы использовать разные имена методов или копировать участок кода из Products.cfc. Однако в версии MX 6.1 мы можем использовать имя super.methodName, чтобы вызвать метод в родительском классе. Это означает, что в компоненте Book может быть свой метод getPrice(), который выглядит так, как показано в четвертом примере кода.

Пример кода 4:
Этот метод использует возможность super, чтобы вызывать метод getPrice из родительской компоненты. Поскольку компонента Book расширяет возможности компоненты Products, то это означает, что super ссылается на метод getPrice в компоненте Products.

 

Определяем присутствие ColdFusion MX 6.1

Как вы знаете, каждая версия ColdFusion MX имеет разные версии компиляции (build), которые показывают номер версии. Эти номера не легко запомнить. Однако, если вы хотите определить, является ли сервер именно ColdFusion MX 6.1, то вы можете использовать простой проверочный код. Просто используйте результат функции getFunctionList() для проверки присутствия того, что есть в ColdFusion MX 6.1. В нашем случае это будет функция wrap, которая появилась только в версии 6.1 (см. пятый пример кода).

Пример кода 5:
Этот проверочный код может быть вставлен в компоненту, чтобы быть уверенным, что компонента будет запущена только под версией MX 6.1.

 

Заключение

Надеюсь эта статья поспособствует появлению у вас интереса к версии 6.1 и к использованию ColdFusion компонент. Сейчас самое время узнать, как много полезного могут они привнести в ваши приложения.


Источник: ColdFusion Components under a Red Sky

 


Hosted by uCoz