Категорія: FW/1
Современные фреймворки для качественной разработки на Adobe Coldfusion
(Доклад на встрече .NET User Group Sevastopol 29 июля 2011г., офис компании Softserve, Севастополь)
Фреймворк - это кусок кода, который используется повторно для создания проектов на его основе. Это своеобразны шаблон проектов. Фреймворк призван ограничивать фантазию разработчика, ставить определенные рамки, но взамен фреймворк предлагает хорошие, проверенные архитектурные решения. Следуя вдоль линий, намеченных фреймворком, разработчик в результате получит предсказуемый результат и качественный "робастный" код.
Прежде чем рассказать о фреймворках для Coldfusion, напомним, что представляет из себя этот продукт. Adobe Coldfusion - это сервер приложений, написанный по спецификации JEE, и реализующий язык Coldfusion Markup Language (CFML). CFML - интерпретируемый язык, с помощью которого можно создать веб-сайты любой сложности. Кроме веб-сайтов для Интернета, с помощью Coldfusion легко создавать сайты для корпоративных сетей (Интранетов), благодаря хорошей интеграции с корпоративными серверами, работе с разными форматами данных и протоколов.
Coldfusion появился в 1995 году и обрел популярность во времена "бума дот-комов". В то время сайты делались вебмастерами на HTML, без привлечения скриптовых языков, а единственной опцией было использование Perl. Последний нельзя считать легким для изучения и применения вебмастером - человеком с преимущественно дизайнерским набором навыков. Ответом на это было сделать простой теговый язык наподобие HTML, для быстрого освоения и разработки сайтов. После краха доткомов, Coldfusion несколько растерял популярность на волне популярности ASP и PHP, но выжил благодаря хорошей адаптации в корпоративной среде и в государственном аппарате США. Сейчас происходит второе рождение Coldfusion, и ему есть что предложить миру.
Скорость и легкость разработки на CFML имеет свои обратные стороны. Зачастую, код писался слишком быстро, чтобы выйти на рынок быстрее конкурентов. Качество было забыто, и зачастую код писался непрофессиональными программистами, что не могло отразиться на качестве. Отсутствие общей архитектуры проекта и организации кода, привело к появлению "спагетти"-кода (длинные куски кода, связанные с другими кусками в неразрешимые клубки), в котором сложно разбираться, исправлять ошибки и расширять функциональность. Выделим основные проблемы неструктурированного кода:
- отсутствие общей для проекта структуры кода
- низкая связность кода (low cohesion) - бизнес-логика "размазана" по разным участкам кода в проекте
- высокая связанность кода (tight coupling) - модули кода могут выполнять действия только в связке с другими модулями или внешними данными)
Соответственно, и решение этих проблем лежит в:
- архитектуре - применении паттерна MVC
- повышении связности кода (high cohesion) - организации модулей, каждый из которых реализует одну, заранее хорошо определенную бизнес-функцию
- понижении связанности кода (loose coupling) - делать модули как можно менее зависимыми друг от друга, передавая параметры или обмениваясь сообщениями
Хороший фреймворк призван решить эти три проблемы. Будучи написан опытными людьми, фреймворк предложит решения и направит разработчика по правильному пути. При этом фреймворк должен без изменения подходить вашему проекту, а его код быть легким и оптимизированным. Выбирая фреймворк из нескольких, обратите внимание насколько он хорошо поддерживается, есть-ли у него сторонники, насколько хороша документация.
Опишу несколько популярных фреймворков. Как правило, фреймворки используют такой паттерн для URL:
index.cfm?action=module.procedure
Единая точка входа в приложение - index.cfm, и некоторый "переключатель" - переменная action, в которой задается модуль и действие внутри этого модуля.
Fusebox
Один из ранних фреймворков. В версии 3 использовал CFML для описания модулей, в версии 4 это нужно делать через XML. В 5 версии появилась возможность отказаться от XML в пользу использования CFC. В настоящий момент фреймворк не поддерживается, хотя core-файлы стабильны и пригодны для работы с любым проектом.
Mach-II
Первый объектно-ориентированный фреймворк, представлен с появлением поддержки CFC в Coldfusion MX (2003). С помощью XML-файла фремворк описывает события (events), компоненты CFC, реагирующие на эти события, и views - CFM-файлы, отвечающие за внешний вид. Фреймворк развивается, на нем реализованы многие корпоративные приложения.
Coldspring
http://www.coldspringframework.org/
При работе с многими CFC-компонентами может встать вопрос об их упорядоченном использовании. Например, когда нужно инстанцировать зависимые объекты или синглтоны. Чтобы не следить за зависимостями вручную, фреймворк Coldspring может делать это автоматически. Для этого используется XML-конфигурация используемых объектов (beans), а для вызова конкретного объекта можно использовать лишь запрос к фабрике объектов Coldspring.
TransferORM
Object-Relation Mapping - технология работы с данными в БД с помощью объектного подхода. Один экземпляр (объект) сопоставляется (mapped) одной строке в таблице БД. Это позволяет получать доступ (считывать), добавлять, изменять и удалять записи из БД, не прибегая к написанию SQL-кода. В конечном итоге это экономит время на рутинных операциях. TransferORM - это ORM-фреймворк для Coldfusion 7 и выше. Существующие таблицы БД (и их связи) описываются XML-файлом, по которому в последствии генерируются объекты. Каждый объект содержит поля, соответствующие полям таблицы в БД, а также геттеры-сеттеры для доступа к этим полям. TransferORM поддерживает возврат списков сущностей, поиск по фильтру, поиск по запросу (используется язык TQL - Transfer Query Language).
FW/1 (Framework One)
Новый фремворк, построенный по принципу Convention over Configuration, при котором описание структуры ложится на файловую систему. Фреймворк реализован всего одним CFC файлом, от которого нужно унаследовать Application.cfc нового проекта. Фреймворк реализует паттерн MVC таким образом. Контроллером модуля является один CFC, находящийся в папке /controllers, в этом контроллере определены методы данного модуля. Для доступа к внешним данным можно использовать службу, которая также реализуется через CFC в папке /services. После выполнения метода контроллера, данные собранные в контроллере и службе, через переменную rc передаются дальше, во view, который лежит в соответсвенно папке views/module/procedure.cfm. Для облегчения дизайнерского труда используются шаблоны, которые лежат в папке /layouts и могут иметь три уровня вложенности. Вот иллюстрация, как происходит вызов и сборка конечной страницы:
Минимально необходимым файлом для создания приложения на FW/1 является /views/module/procedure.cfm. Остальные файлы, включая контроллеры, сервисы и лэйауты, необязательны. Framework One подкупает своей простотой использования и скоростью работы.
Заключение
Описанные фреймворки - не единственные, но популярные, которые я бы лично рекомендовал для любого проекта. Мой личный фаворит - FW/1 - за его легкость и простоту. Используя наработанные библиотеки классов (CFC) в проекте на базе FW/1, я обычно использую Coldspring для описания зависимостей между классами в библиотеке, а также TransferORM для упрощения рутинных операций. Для сложных запросов я не прибегаю к помощи TransferORM, чтобы не усложнять код; я пишу обычный SQL-код и хранимые процедуры. Применять тот или иной фреймворк нужно осмысленно, примеряя его возможности к потребностям конкретного проекта и конкретной команды.
Дополнительное чтение по теме:
http://www.aliaspooryorik.com/blog/index.cfm/e/posts.details/post/oo-and-fusebox-no-xml-141
http://www.adobe.com/devnet/coldfusion/articles/frameworks_intro.html
Новини CF-OpenSource v17
Цей випуск повністю присвячено новинкам з RIAForge.
Додаток для взаємодії з API популярної блоґо-платформи Tumblr.
Втілення великої кількості можливостей служби Google Geocode.
Додаток для взаємодії з API Recurly.com, системи для організації регулярних платежів.
Lorem Ipsum Dummy Text Generator v1.0
Назва говорить сама за себе. Додаток для CF Builder.
Бібліотека для локалізації додатків, створена за подобою аналогічного пакету для Flex.
Обгортка для Java-бібліотеки OpenID4Java.
Втілення взаємодії з означеною службою.
Цікавий проект, побудований на FW/1, що втілює фабрику для об’єктів різних типів.
Додаток для CF Builder для швидкого написання керівних конструкцій FB5NoXML.
Бібліотека для базової взаємодії з сервісами на базі протоколу OAuth 1.0
Додаток для CF Builder, що може стати у нагоді при роботі з CF9 ORM.
Додаток на базі MG, презентований автором на конференції NCDevCon 2010.
CFC Hint Checker Extension 0.9
Додаток для CF Builder, що шукає визначення методів із загубленими hint-ами.
Making OO/MVC ColdFusion Simple 2.0
Ще один CFML-приклад, презентований автором на конференції (CFObjective 2010).
Втілення стандарту WS-Security без використання Java-бібліотек.
Бібліотека для взаємодії з поштовими службами.
Нова версія популярної відкритої CMS.
Додаток, що допомагає швидко спакувати (та надіслати поштою) код прямо з CF Builder.
Новини CF-OpenSource v16
Цей спец-випуск присвячено виходу нових версій двох прогресивних фреймворків.
Команда розробників CFWheels невпинно наближається до великого релізу, тим часом випустивши оновлення за номером 1.0.5.
Воно включає в себе більш як 2 десятки виправлень. Повний їх список можна переглянути в публікації Released: ColdFusion on Wheels 1.0.5
Натомість Шон Корфілд (Sean Corfield) його вже досяг, повідомивши про вихід версії 1.1.
Серед оновлень:
- Рекомендований скелет додатку.
- Більш гнучка конфігурація підсистем та контролерів.
- Нові можливості API.
Повний список можна переглянути в публікації FW/1 Release 1.1 Available!
Новини CF-OpenSource v15
Оновлення продуктів та додатків
SeleniumMX - A Selenium + MxUnit Framework
Вельми перспективний проект, що об'єднує в собі два фреймворки для тестування.
Допоміжний випуск фреймворку, що слідує за нещодавним 1.8.
cfUniForm v.4.0 - Leaner, Meaner, More Features - Just Plain Ol' Better
Нова версія фреймворку для побудови форм.
Новий convention-based фреймворк для CF9, що використовує можливості Hibernate.
Компонента для обчислення розмірів flash-роліку.
Компонента для взаємодії з API сервісу для розміщення малюнків.
ValidateThis CFWheels Plugin 0.5
Додаток до CFWheels, що дозволяє використовувати на сайті ValidateThis, фреймворк для валідації форм.
Rhea: Rackspace Cloud API 0.99
Втілення взаємодії з API хостингу Rackspace Cloud.
Модуль, що дозволяє програмно керувати включенням JavaScript та CSS до сторінок сайту, в тому числі з мінімізацією.
bit.ly URL Service API CFC 1.0
Втілення взаємодії з API Bit.ly, сервісу скорочення посилань.
Втілення взаємодії з API Eventbrite, сервісу для організації подій.
ColdFusion File Manager 1.0 alpha 3
Файловий менеджер з GUI на Ajax.
Оголошення про випуск оновлення популярного блогу.
Різні оновлення та повідомлення
Code coverage & cyclomatic complexity calculations coming to ColdFusion
Обговорення системи для тестування Chimera.
Framework One Sample Application - QBall
Приклад розробки на FW/1 від Рея Кемдена.
Do you want to see this in LightWire?
Пітер Белл запитує про доцільність додавання деяких нових можливостей до LightWire.
Ще один опис першого досвіду роботи з FW/1.
Опис досвіду розгортання Mango з Oracle в якості СУБД.
Content Management and the Splash CMS — Introduction
Огляд Splash CMS, побудованої на базі CFWheels.
Новини CF-OpenSource v14
Оновлення продуктів та додатків
Model Glue 3.1 Release Candidate
New Official Release - Model-Glue 3.1
Вийшов новий випуск популярного фреймворку. Він містить чималу кількість виправлень та покращень, повний список яких можна переглянути за першим посиланням.
Марк Мендел робить короткий огляд планів щодо першого повноцінного релізу його системи для автоматизації документування.
Додаток, що замінює редактор на Markdown в Mango Blog.
Втілення підсвітки синтаксису з prettify.js для Mango.
Позиціонується як проект для управління процесом розробки з використанням Agile/Scrum методик. На момент написання публікації чомусь було відсутнє посилання до завантаження.
Назва говорить сама за себе.
Компонента для втілення можливостей API Intuit QuickBooks. Яких саме, пропонується дізнатися з документації.
Компонента для організації взаємодії з IMAP-шлюзом.
Компонента для організації взаємодії з SNMP-шлюзом.
Колись комерційний продукт для роботи з малюнками зроблено вільним, очевидно завдяки розповсюдженю CF8+, де ці можливості втілені на рівні мови.
Ситуація аналогічна попередньому записові.
cfCalais – A Coldfusion tag to easily create semantic data
Мітка для додавання семантичної розмітки для даних на сторінках сайту.
Mach-II Simplicity (1.8) Released
Випущено нову версію популярного фремворку.
Різні оновлення та повідомлення
Trying out the CFWheels framework
Звіт про експерименти початківця з CFWheels.
Front Controllers Should NOT Extend Application.cfc
Барні Бувер пропонує подискутувати щодо потреби наслідування Application.cfc на прикладі FW/1
Замітка розповідає про те, як можна вбудувати JavaLoader до проекту на Mach-II.
ColdFusion Query of Query tips and tricks
Ендрю Мерсер ділиться деякими знахідками та підказками з використання QoQ.
Cache Template in Request Setting Explained
Піт Фрейтаґ пояснює особливості цієї нової можливості CF9.
Новини CF-OpenSource v13
Оновлення продуктів та додатків
ColdFusion on Wheels 1.0.1 Maintenance Release
ColdFusion on Wheels 1.0.2 Maintenance Release
Відразу два супровідні випуски (maintenance releases) "Коліс", перший містить ряд покращень стабільності фреймворку, але містить якісь невідомі (в сенсі не розкриті розробниками) проблеми, для вирішення яких і було в пожежному режимі випущено наступне оновлення.
Додаток від розробників CMS, що дозволяє легко включати існуючі додатки на FW/1 до проекту.
Компонента для взаємодії з API системи Spotify
Втілення можливості використання цієї Java-бібліотеки з ColdFusion
Компонента для взаємодії з API системи Twilio (підтримуються як голосові, так і SMS послуги)
Бібліотека для керування макетами сайтів.
Додаток, що втілює механізм списків.
Різні оновлення та повідомлення
Проект The ColdFusion Common Modules це колекція ініціатив, спрямованих на розробці стабільних, об'єктно-орієнтованих бібліотек ColdFusion компонент з відкритим кодом, пристосованих для багаторазового використання.
Сьогодні було випущено стабільну версію цього менеджера для ColdFusion серверів. Він розпосвюджується вільно (крім вихідних кодів AIR-додатку - тому новину було розміщено в цій частині публікації), але пропонується платний пакет з технічною підтримкою та оновленнями.
Зміна платформи Mura CMS 5.2
Сьогодні з'явилося оновлення для популярної CMS, що включає ряд значних покращень, як в інтерфейсній частині, так і в коді.
Найбільш цікавим фактом є те, що розробники вирішили позбутися фреймворку Fusebox та поступово переходити на FW/1, за їх словами "задля кращої швидкодії". Почали вони це робити з панелі адміністратора.
Повний список оновлень можна дізнатися з повідомлення в блозі проекту: Mura CMS version 5.2 is live!
Випущено FW/1 1.0
Сьогодні сталися дві взаємопов'язані події.
Шон Корфілд повідомив про завершення роботи над документацією для FW/1, що було останньою задачею на шляху до релізу! Відповідно, другою подією і стала офіційна поява випуску 1.0.
Бажаємо проектові стабільного розвитку, а розробникам натхнення.
Поповнення команди FW/1
Як повідомив у своєму блозі Шон Корфілд, команда фреймворку FW/1 збільшилася до двох чоловік.
Другим став Раян Коґсвелл, дуже активний учасник обговорення додатку та автор кількох корисних патчів.
Здається, настав час пильніше придивитися до цього фреймворку.