Категорія: FW/1

 

Современные фреймворки для качественной разработки на Adobe Coldfusion

(Доклад на встрече .NET User Group Sevastopol 29 июля 2011г., офис компании Softserve, Севастополь)

(Слайды в виде PDF-файла)

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

Прежде чем рассказать о фреймворках для 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

http://www.fusebox.org/

Один из ранних фреймворков. В версии 3 использовал CFML для описания модулей, в версии 4 это нужно делать через XML. В 5 версии появилась возможность отказаться от XML в пользу использования CFC. В настоящий момент фреймворк не поддерживается, хотя core-файлы стабильны и пригодны для работы с любым проектом.

Mach-II

http://www.mach-ii.com/

Первый объектно-ориентированный фреймворк, представлен с появлением поддержки CFC в Coldfusion MX (2003). С помощью XML-файла фремворк описывает события (events), компоненты CFC, реагирующие на эти события, и views - CFM-файлы, отвечающие за внешний вид. Фреймворк развивается, на нем реализованы многие корпоративные приложения.

Coldspring

http://www.coldspringframework.org/

При работе с многими CFC-компонентами может встать вопрос об их упорядоченном использовании. Например, когда нужно инстанцировать зависимые объекты или синглтоны. Чтобы не следить за зависимостями вручную, фреймворк Coldspring может делать это автоматически. Для этого используется XML-конфигурация используемых объектов (beans), а для вызова конкретного объекта можно использовать лишь запрос к фабрике объектов Coldspring.

TransferORM

http://transfer-orm.com/

Object-Relation Mapping - технология работы с данными в БД с помощью объектного подхода. Один экземпляр (объект) сопоставляется (mapped) одной строке в таблице БД. Это позволяет получать доступ (считывать), добавлять, изменять и удалять записи из БД, не прибегая к написанию SQL-кода. В конечном итоге это экономит время на рутинных операциях. TransferORM - это ORM-фреймворк для Coldfusion 7 и выше. Существующие таблицы БД (и их связи) описываются XML-файлом, по которому в последствии генерируются объекты. Каждый объект содержит поля, соответствующие полям таблицы в БД, а также геттеры-сеттеры для доступа к этим полям. TransferORM поддерживает возврат списков сущностей, поиск по фильтру, поиск по запросу (используется язык TQL - Transfer Query Language).

FW/1 (Framework One)

http://fw1.riaforge.org/

Новый фремворк, построенный по принципу 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

Автор: Родион Быков | Опубліковано: 29.07.2011 о 09:00 | Категорії: CFML - CFUG - Frameworks - Fusebox - FW/1 - MachII -

 

Новини CF-OpenSource v17

Цей випуск повністю присвячено новинкам з RIAForge.

tumblrCFC .2

Додаток для взаємодії з API популярної блоґо-платформи Tumblr.

Google Geocoder V3

Втілення великої кількості можливостей служби Google Geocode.

cfRecurly .2

Додаток для взаємодії з API Recurly.com, системи для організації регулярних платежів.

Lorem Ipsum Dummy Text Generator v1.0

Назва говорить сама за себе. Додаток для CF Builder.

ResourceManager 1.0.0 (Beta)

Бібліотека для локалізації додатків, створена за подобою аналогічного пакету для Flex.

OpenID4CF 0.2

Обгортка для Java-бібліотеки OpenID4Java.

Google Weather API

Втілення взаємодії з означеною службою.

Framefactory One 1.1

Цікавий проект, побудований на FW/1, що втілює фабрику для об’єктів різних типів.

FuseBox 5 no XML Snippets 1

Додаток для CF Builder для швидкого написання керівних конструкцій FB5NoXML.

OAuthConsumer 0.6

Бібліотека для базової взаємодії з сервісами на базі протоколу OAuth 1.0

ORMScanner Extension 1

Додаток для CF Builder, що може стати у нагоді при роботі з CF9 ORM.

Model-Glue security samples

Додаток на базі MG, презентований автором на конференції NCDevCon 2010.

CFC Hint Checker Extension 0.9

Додаток для CF Builder, що шукає визначення методів із загубленими hint-ами.

Making OO/MVC ColdFusion Simple 2.0

Ще один CFML-приклад, презентований автором на конференції (CFObjective 2010).

WSS4CF 0.1

Втілення стандарту WS-Security без використання Java-бібліотек.

AirxMail 0.5

Бібліотека для взаємодії з поштовими службами.

FarCry 6.0.2

Нова версія популярної відкритої CMS.

Zip/Email Extension 1

Додаток, що допомагає швидко спакувати (та надіслати поштою) код прямо з CF Builder.

 

Автор: Сергій Галашин | Опубліковано: 23.06.2010 о 10:55 | Категорії: OpenSource - ColdFusion Builder - RIAForge - Fusebox - FW/1 - Components -

 

Новини 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!

 

Автор: Сергій Галашин | Опубліковано: 20.06.2010 о 21:21 | Категорії: OpenSource - Frameworks - CFWheels - FW/1 -

 

Новини CF-OpenSource v15

Оновлення продуктів та додатків

SeleniumMX - A Selenium + MxUnit Framework

Вельми перспективний проект, що об'єднує в собі два фреймворки для тестування.

Mach-II 1.9

Допоміжний випуск фреймворку, що слідує за нещодавним 1.8.

cfUniForm v.4.0 - Leaner, Meaner, More Features - Just Plain Ol' Better

Нова версія фреймворку для побудови форм.

ColdMVC Available on GitHub

Новий convention-based фреймворк для CF9, що використовує можливості Hibernate.

Flash Inspector

Компонента для обчислення розмірів flash-роліку.

twitPic API 1.1

Компонента для взаємодії з API сервісу для розміщення малюнків.

ValidateThis CFWheels Plugin 0.5

ValidateThis 0.92

Додаток до CFWheels, що дозволяє використовувати на сайті ValidateThis, фреймворк для валідації форм.

Rhea: Rackspace Cloud API 0.99

Втілення взаємодії з API хостингу Rackspace Cloud.

ScriptWriter 3.0.0.0_alpha6

Модуль, що дозволяє програмно керувати включенням JavaScript та CSS до сторінок сайту, в тому числі з мінімізацією.

bit.ly URL Service API CFC 1.0

Втілення взаємодії з API Bit.ly, сервісу скорочення посилань.

Hermes Events 1.0

Втілення взаємодії з API Eventbrite, сервісу для організації подій.

ColdFusion File Manager 1.0 alpha 3

Файловий менеджер з GUI на Ajax.

BlogCFC 5.9.5.005

Оголошення про випуск оновлення популярного блогу.

 

Різні оновлення та повідомлення

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.

Day one with FW/1

Ще один опис першого досвіду роботи з FW/1.

MangoBlog/Oracle Integration

Опис досвіду розгортання Mango з Oracle в якості СУБД.

Content Management and the Splash CMS — Introduction

Огляд Splash CMS, побудованої на базі CFWheels.

Автор: Сергій Галашин | Опубліковано: 16.03.2010 о 11:28 | Категорії: CFWheels - ColdFusion 9 - Frameworks - FW/1 - Links - News - OpenSource - ORM - RIAForge -

 

Новини CF-OpenSource v14

Оновлення продуктів та додатків

Model Glue 3.1 Release Candidate

New Official Release - Model-Glue 3.1

Вийшов новий випуск популярного фреймворку. Він містить чималу кількість виправлень та покращень, повний список яких можна переглянути за першим посиланням.

ColdDoc 1.0 Alpha Released

Марк Мендел робить короткий огляд планів щодо першого повноцінного релізу його системи для автоматизації документування.

Salsa 1.0

Додаток, що замінює редактор на Markdown в Mango Blog.

Prettify 1.0

Втілення підсвітки синтаксису з prettify.js для Mango.

<cfscrum> 0.01

Позиціонується як проект для управління процесом розробки з використанням Agile/Scrum методик. На момент написання публікації чомусь було відсутнє посилання до завантаження.

Google Translation API CFC

Назва говорить сама за себе.

ColdBooks

Компонента для втілення можливостей API Intuit QuickBooks. Яких саме, пропонується дізнатися з документації.

IMAP Watcher Event Gateway

Компонента для організації взаємодії з IMAP-шлюзом.

SNMP Event Gateway

Компонента для організації взаємодії з SNMP-шлюзом.

Alagad Image Component

Колись комерційний продукт для роботи з малюнками зроблено вільним, очевидно завдяки розповсюдженю CF8+, де ці можливості втілені на рівні мови.

Alagad Captcha Component

Ситуація аналогічна попередньому записові.

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

Using JavaLoader in Mach-II

Замітка розповідає про те, як можна вбудувати JavaLoader до проекту на Mach-II.

ColdFusion Query of Query tips and tricks

Ендрю Мерсер ділиться деякими знахідками та підказками з використання QoQ.

Cache Template in Request Setting Explained

Піт Фрейтаґ пояснює особливості цієї нової можливості CF9.

Автор: Сергій Галашин | Опубліковано: 14.03.2010 о 11:18 | Категорії: ColdFusion 9 - Community - Discussions - Frameworks - FW/1 - Links - MachII - Model-Glue - News - OpenSource - RIAForge -

 

Новини CF-OpenSource v13

 

Оновлення продуктів та додатків

 ColdFusion on Wheels 1.0.1 Maintenance Release

ColdFusion on Wheels 1.0.2 Maintenance Release

Відразу два супровідні випуски (maintenance releases) "Коліс", перший містить ряд покращень стабільності фреймворку, але містить якісь невідомі (в сенсі не розкриті розробниками) проблеми, для вирішення яких і було в пожежному режимі випущено наступне оновлення.

Mura CMS: New FW/1 Plugin

Додаток від розробників CMS, що дозволяє легко включати існуючі додатки на FW/1 до проекту.

Spotify MetaData API 1.0

Компонента для взаємодії з API системи Spotify

YUICompressor CFC 0.11

Втілення можливості використання цієї Java-бібліотеки з ColdFusion

Twilio Library 0.3

Компонента для взаємодії з API системи Twilio (підтримуються як голосові, так і SMS послуги)

Layout Components 1.0 RC1

Бібліотека для керування макетами сайтів.

!Lists Alpha 1

Додаток, що втілює механізм списків.

 

Різні оновлення та повідомлення

CFCommons.org

Проект The ColdFusion Common Modules це колекція ініціатив, спрямованих на розробці стабільних, об'єктно-орієнтованих бібліотек ColdFusion компонент з відкритим кодом, пристосованих для багаторазового використання.

Merlin 1.0.1

Сьогодні було випущено стабільну версію цього менеджера для ColdFusion серверів. Він розпосвюджується вільно (крім вихідних кодів AIR-додатку - тому новину було розміщено в цій частині публікації), але пропонується платний пакет з технічною підтримкою та оновленнями.

Автор: Сергій Галашин | Опубліковано: 19.02.2010 о 22:50 | Категорії: CFWheels - CMS - Frameworks - FW/1 - News - OpenSource - RIAForge -

 

Зміна платформи Mura CMS 5.2

Сьогодні з'явилося оновлення для популярної CMS, що включає ряд значних покращень, як в інтерфейсній частині, так і в коді.

Найбільш цікавим фактом є те, що розробники вирішили позбутися фреймворку Fusebox та поступово переходити на FW/1, за їх словами "задля кращої швидкодії". Почали вони це робити з панелі адміністратора.

Повний список оновлень можна дізнатися з повідомлення в блозі проекту: Mura CMS version 5.2 is live!

Автор: Сергій Галашин | Опубліковано: 04.02.2010 о 21:01 | Категорії: CMS - Fusebox - FW/1 - News - OpenSource -

 

Випущено FW/1 1.0

Сьогодні сталися дві взаємопов'язані події.

Шон Корфілд повідомив про завершення роботи над документацією для FW/1, що було останньою задачею на шляху до релізу! Відповідно, другою подією і стала офіційна поява випуску 1.0.

Бажаємо проектові стабільного розвитку, а розробникам натхнення.

Автор: Сергій Галашин | Опубліковано: 04.01.2010 о 18:35 | Категорії: News - OpenSource - FW/1 -

 

Поповнення команди FW/1

Як повідомив у своєму блозі Шон Корфілд, команда фреймворку FW/1 збільшилася до двох чоловік.

Другим став Раян Коґсвелл, дуже активний учасник обговорення додатку та автор кількох корисних патчів.

Здається, настав час пильніше придивитися до цього фреймворку.

Автор: Сергій Галашин | Опубліковано: 19.11.2009 о 21:03 | Категорії: Community - Frameworks - FW/1 - News -