Категорія: MachII

 

Современные фреймворки для качественной разработки на 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 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 v10

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

 

cfRhino 0.3.4

Новий MVC фреймворк.

jTidy CFC 1.2

Компонента, що за допомогою jTidy ковертує текст до валідного xHTML.

cfturbine 1.2_BETA

Двигунець для створення прототипів, що реалізує принципи scaffolding.

SQLiteCFC 1.1a

Компонента для безпосередньої взаємодії з SQLite базою без участі JDBC, реалізує стандартні операції, вміє зберігати набір CF даних безпосередньо в таблицю SQLite.

CFC2UML 0.6

Додаток для експорту мета-даних компоненти до XML-файлу, що може бути імпортований до редактора UML.

Deadwood 1.0

Додаток для пошуку зайвих CFM-файлів в директоріях проекту. Навряд чи буде корисним у випадку використання фреймворків, бо базується на пошуку безпосередніх підключень (cfinclude) сторінок.

YelpCFC .1

Втілення API рекомендаційного сервісу Yelp.

Collection Iterator 1.0

Втілення механізму ітератора для складних типів даних.

cfBCove 1.0

Втілення API сервісу хостингу онлайн-відео Brightcove.

Linked List 2.1

Втілення складної структури даних: зв'язаний список.

i18n 1.0

Бібліотека для інтернаціоналізації додатків, потребує CF9.

Fixed File Reader 1.0

Вельми корисна бібліотека, що дозволяє не зациклюватися на XML як форматі для обміну даними, але й підтримувати вже існуючі складні текстові формати (як EDI чи VCF4).

easyImages 0.8

Бібліотека, що реалізує базові операції з малюнками.

Smartermail API wrapper + UI 1.0

Втілення API програмного комплексу Smartermail.

 

Кілька нових додатків для Mango

 

OpenSearch Plugin 1.0

Розширення для вбудови пошуку блогу в пошукове вікно оглядача.

Google Translation Widget

Додає вказаний віджет до сайту, щоб читачі могли швидко перекладати вміст за допомогою перекладача Google.

Social Links 1.0.1

Додає блок зі швидкими посиланнями на популярні соціальні веб-сайти, наприклад Facebook чи Twitter.

PowerMail 1.0

Дозволяє надсилати листи з блогу (наприклад, сповіщення про коментарі) через SMTP, що вимагають TLS/SSL з'єднання.

twitpics 1.0

Реалізує включення малюнків з Twitpics в бічну панель блогу.

 

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

 

Model-Glue Training Course

Розробники фреймворку Model-Glue опублікували тренувальний курс для новачків.

Mach-II Simplicity (1.8) RC2 Released

Черговий крок до випуску нової версії Mach-II

ColdFISH 3.0 Alpha Released

Ще один популярний продукт готується до випуску нової версії. Це додаток для підсвітки синтаксису від Джейсона Делмора, що використовується зокрема в BlogCFC.

Fusebox Scaffolder Alpha 3

Кілька оновлень отримав і додаток, що втілює scaffolding для Fusebox.

Implicit Blocks in Fusebox 5.5.1

Патч для Fusebox, що дозволяє обійтись без зайвих true міток, коли в if-блоці немає false.

Portcullis 2.0 released

Оновлено бібліотеку для захисту додатків від SQL-ін'єкцій та XSS атак.

 

Автор: Сергій Галашин | Опубліковано: 17.01.2010 о 13:19 | Категорії: MachII - ColdFusion 9 - OpenSource - Mango Blog - Fusebox - RIAForge - Frameworks - News -

 

Новини CF-OpenSource v9

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

 

Qualified Address LiveAddress API 0.0.3

Особливо приємне оновлення, бо це мій перший досвід публікації вільного ПЗ на RIAForge. Сподіваюсь, комусь стане в нагоді ця невеличка бібліотека, що організовує взаємодію з сервісом Qualified Address для покращення та виправлення адрес.

ppIPN

Компонента для обробки асинхронних IPN-запитів, що надсилає Paypal в процесі обробки транзакцій. Більш детально на сайті розробника.

CF Builder DocShare Support 1.0

Втілення популярного додатку Eclipse для CFB.

dbfrp 1.0

Застосунок для пошуку та заміни тексту в базі даних, з можливістю відміни змін.

Stiletto - Silent server-side debugging 1.0.1

Застосунок, призначений для збереження даних про активність користувача, що призвела до помилок в роботі сайту, зокрема налагоджувальної інформації з прив'язкою за доменом та IP адресою користувача.

ColdFusion Social Network Alpha_0.1

Рання альфа втілення сайту для соціальної мережі.

WordArt for ColdFusion 0.6

Компонента для створення малюнків з типографією.

Regular Expression Find And Replace 0.1

Додаток CFB для пошуку з використанням регулярних виразів. Поки не активний.

Mach-II 1.8 Release Candidate

Готується до випуску нова версія фреймворку, за посиленням опис нових можливостей.

MXUnit 1.0.8

Оновлення популярної бібліотеки для модульного тестування.

Запуск ForgeBox

Луїс Маджано повідомив про запуск ресурсу для обміну застосунками та додатками, побудованими на ColdBox.

FlexPMDPDF - A ColdFusion PDF report generator for Flex PMD!

Як зрозуміло з назви, це генератор PDF звітів для Flex.

 

 

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

 

Mach-II Runs on Google App Engine with Open BlueDragon

Мет Вудвард повідомив про те, що нова версія фреймворку тепер може бути розгорнута на GAE.

 

Автор: Сергій Галашин | Опубліковано: 12.12.2009 о 18:53 | Категорії: Blogs - Coldbox - ColdFusion Builder - Flex - MachII - OpenSource - RIAForge -

 

Начало работы с MachII+Coldspring

Интересующийся разработчик знает, что для Coldfusion существует стопятьсот фреймворков (навскидку Fusebox, Mach II, Coldbox, FW/1), и в настоящее время без фреймворка начинать разрабатывать просто некошерно. На страницах нашего уютного бложека мы попробуем освещать популярные фреймворки. Для затравочки начну с описания Mach II, с самого начала работы с ней (ним ?).

Начало работы с Mach II взято из этой статьи (via) с небольшими изменениями. Все сводится к этому:

1. скачать и развернуть код собственно Mach II, Dashboard и Coldspring, добавить маппинги в CF Administrator:

  • /coldspring
  • /MachII
  • /MachIIDashboard

Код этих трех я расположил вне корня веб-сервера и настроил маппинги, чтобы все проекты использовали одну версию фреймворка и чтобы Mach II не путался под ногами в корневой папке.

2. Код Skeleton развернуть в корень веб-сервера.

3. В файле /skeleton/config/mach-ii.xml подправить:

а) раскомментировать подключение Coldspring (mach-ii_coldspringProperty.xml) в разделе includes

б) добавить модуль с Dashboard

в) изменить свойство applicationRoot в разделе properties

г) открыть сайт в браузере и радоваться.

Упомянутый в статье баг CF 9 № 78588 починен и MachII полноценно работает под CF9 без всяких "но и если".

 

Автор: Родион Быков | Опубліковано: 29.10.2009 о 09:14 | Категорії: ColdFusion 9 - HOWTO - Links - MachII -