component.cfc – родитель всех компонент

К этому моменту уже все знают, что компоненты – это самое радикальное изменение в CFML с момента его основания. Их появление обусловлено тремя причинами: Эти объектно-ориентированные возможности включают в себя новые контейнеры переменных; пакеты; самоанализ и создание мета данных; программирование, основанное на самостоятельных объектах; наследование. В традиционных объектно-ориентированных языках всех объекты наследуются от одного родительского класса «Object». Многие разработчики не учитывают тот факт, что и компоненты тоже имеют родительский класс. Его имя – component.cfc, и он может быть очень полезен во время разработки приложений.

 

Где можно найти component.cfc?

Если вы создадите CFC, которая не наследует никакую другую компоненту, и посмотрите ее мета данные, то значение hierarchy по-умолчанию равно «WEB-INF.cftags.component». Этот файл вы найдете в папке «CfusionMX\WWWRoot\WEB-INF\cftags», если вы используете самостоятельную версию ColdFusion, а в J2EE версии (поверх JRun4) этот файл будет в папке «JRun4\servers\{your_server_name}\cfusion-ear\cfusion-war\WEBINF\cftags». Вы можете посмотреть мета данные файла component.cfc по адресу http://{server_domain}/CFIDE/componentutils/cfcexplorer.cfc?method=getcfcinhtml&name=WEB-INF.cftags.component заменив {server_domain} на имя localhost:8500 или любой другой URL, который вы используете для просмотра своей машины.

 

Что делает component.cfc?

Ничего. По-умолчанию в ColdFusion MX 6.1 файл component.cfc пуст. Как уже было сказано, по-умолчанию, все компоненты наследуются от компоненты component.cfc. Эту компоненту можно представить как файл Application.cfm для обычных страниц. Разница в том, что код вне методов в component.cfc исполняется только тогда, когда эта компонента проинициализирована и ее мета данные и методы унаследованы другой компонентой. Это дает вам возможность размещать здесь код, который будет доступен всем компонентам на вашем сервере.

 

Зачем это нужно?

Место, где можно расположить код, дополняющий функциональность всех компонент на сервере имеет две важные стороны. Как уже упоминалось, вы можете думать об этой компоненте как о файле Application.cfm. Если у вас на сервере только одно приложение, которое использует CFC для своей бизнес логики (как любое хорошее приложение), то это будет хорошим местом, где можно расположить функциональность для всех компонент приложения.

Например, если на вашем сервере работает веб сайт вашей компании, то, возможно, всем вашим компонентам всегда нужен доступ к каталогу продукции. Если создать в component.cfc метод, который будет считывать из базы данных каталог продукции, то все компоненты приложения смогут обращаться к этому методу и получать его информацию. Но такой подход не всегда желателен к использованию, т.к. на сервере могут быть и абсолютно отдельные ColdFusion приложения, которым эта информация о каталогах продукции просто не нужна.

Есть еще один пример использования component.cfc. Здесь можно располагать методы для отладки, которые будут доступны всем приложениям. Расширение возможностей компоненты сделает жизнь разработчика немного легче, в чем мы вскоре и убедимся.

 

Работа с component.cfc

Есть малоизвестный факт, что технически в ColdFusion компонентах не обязательно использовать начальные и конечные теги <cfcomponent> и </cfcomponent>. Компоненты будут работать и без них, но тогда они не будут правильно наследоваться от их родителя component.cfc, а также это не позволит использовать теги <cfproperty>, если вы обозначаете мета информацию. Поэтому, лучше всего следовать стандартным рекомендациям по созданию компонент.

По-умолчанию, файл component.cfc пуст. Поскольку он не наследуется ни от какой другой компоненты, то вы можете создавать в нем методы без указания тегов <cfcomponent> и </cfcomponent>. По желанию вы можете использовать тег <cfcomponent>, чтобы создать мета данные об этой компоненте или сделать возможным использование тегов <cfproperty> перед методами. Следуя принципам наследования, любая мета информация, методы и переменные унаследованы всеми другими компонентами на сервере.

Возможно, вы уже догадались, что созданные метод в компоненте с тем же именем, что и в компоненте component.cfc перекроет метод компоненты component.cfc. Это называется перегрузка методов. Обращаться к оригинальному методу, определенному в component.cfc можно с помощью ключевого слова super ( super.methodName() ), принимая во внимание то, что данная компонента не унаследована от какой-либо другой компоненты.

 

Пример использования component.cfc

Если вам нравиться использовать <cfscript>, то не смотря на его богатые возможности вы, возможно, уже заметили его некоторые ограничения. Например, в нем нельзя вызвать тег <cfdump>. Что делать?

Эта проблема решается с помощью создания пользовательской функции, которая принимает одну любого вида переменную, выводит ее содержимое на экран с помощью тега <cfdump> и тегом <cfabort> прекращает обработку страницы. Затем эта функция может быть вызвана из <cfscript>, чтобы посмотреть, что происходит внутри блока <cfscript>. Если вы работаете с компонентами внутри блока <cfscript>, то будет полезным расположить эту функцию внутри component.cfc:
Обратите внимание, что доступ к методу определен как private. Это позволяет скрыть этот метод от тех cfml страниц, которые используют компоненты. Также это позволяет не показывать этот метод в списке методов при просмотре мета данных той компоненты, которая унаследует component.cfc.

Метод dumpIt() также может быть полезен и тем, кто не использует <cfscript>. При разработке приложений с помощью компонент принято отделять бизнес логику. Это означает передачу определенных значений в метод, обработку и возвращение результата. Следовательно, можно прийти к выводу, что методы не должны на прямую выводить что-либо на экран. Чтобы быть уверенным в том, что метод ничего не выводит на экран, следует в теге <cffunction> указывать output="false". Но в нашем случае, мы бы ничего не увидели, что покажет тег <cfdump>, поэтому нам нужно указать output="true".

 

Заключение

Compontnt.cfc является превосходным средством отладки и увеличения возможностей приложений. Здесь был рассмотрен лишь небольшой пример, но, к примеру, вы можете создать еще другой метод dumpIt(), который уже не останавливает, а продолжает обработку страницы. Не трудно добавлять методы в component.cfc, чтобы получить дополнительные возможности.

Но будьте внимательны, т.к. расположенный код в component.cfc может иметь два ограничения:
Источник: component.cfc: The Mother of All Components

 


Hosted by uCoz