Статьи

Джон Фаррар о COOP ColdFusion Framework

COOP — это новый элемент в модуле фреймворка, разработанный для того, чтобы помочь разработчикам быстро запустить и запустить полнофункциональные прототипы. Здесь Джон Фаррар хвастается своим ребенком.

SitePoint: Джон, можешь ли ты дать нам свой лифт для COOP?

Идея COOP заключается в «вдохновляющей простоте» — отделении презентации дизайнера от логики разработчика. Технология начинается с мощного прототипирования и заканчивается кодированием объектов preDOM и чистой универсальной логикой. API позволяет писать код с функциями, не стандартными для встроенных тегов ColdFusion.

SP: Хорошо, вы можете рассказать нам больше об основных функциях?

Мы считаем, что COOP прост в изучении и кодировании. Вам не нужно будет выходить и покупать книгу, чтобы понять, как создавать хорошие приложения, используя эту платформу. Конечно, вы все еще можете это сделать, но для написания хорошего кода не нужно делать вещи настолько сложными, что разработчик CF застрянет. Эта простота означает, что вы можете получить более быструю окупаемость инвестиций и довести разработчиков до скорости, не регистрируя их в клубе «Book of the Geek», просто чтобы не отставать.

Одна из замечательных особенностей COOP связана с правильной инкапсуляцией и разделением дизайна и программной логики. Одним из факторов, который вызывает большой резонанс в сообществе AIR / Flex, является проект Thermo (который позволяет дизайнерам создавать интерфейсы для приложений Flex в визуальной среде). Независимо от того, как это делается, это позволяет разработчику и дизайнеру работать на одних и тех же страницах, не касаясь кода друг друга или не нарушая код друг друга. Они оба работают с отдельными файлами, но могут работать параллельно. Чтобы правильно отделить дизайн от логики, требуется больше, чем CSS, а COOP делает задачу невероятно простой. Позвольте мне объяснить, как.

Пользователь запрашивает страницу. Страница содержит код разметки ColdFusion / COOP в тегах. Перед запуском кода сопроцессор вызывается CFC, который работает параллельно со страницей для управления логикой. Это контроллер, и он позволяет обрабатывать теги страницы как объекты, что означает, что вы можете установить данные и любой атрибут, кроме идентификатора тегов, из сопроцессора. Сопроцессор вызывается снова после выполнения кода разметки, а затем содержимое отправляется обратно пользователю. Таким образом, разметка формирует часть представления запроса. Если ваша модель (данные) необходима, она вызывается через сопроцессор. Да, для тех, кто заботится о таких вещах, он работает как методология MVC.

Кроме того, структура очень гибкая. Мы решительно продвигаем прототипирование. Когда разработчики создают прототипы, они часто хоронят много «плохого кода» на странице разметки — кода, который мы повторно включим в сопроцессор позже. Это нормально, пока мы создаем прототипы. Этот процесс можно сравнить с логикой не создавать пресс-форму блока двигателя только для прототипа автомобиля. Это означает, что мы можем использовать все атрибуты, которые мы будем устанавливать в сопроцессоре прямо внутри разметки. Конечно, это не элегантно, но гораздо более продуктивно на этапе разработки прототипа! Таким образом, COOP позволяет разработчикам и дизайнерам достичь более высокой производительности — разработчики могут передать простой список строк данных для использования прототипа, и, когда прототип утвержден, разработчик может заменить или переопределить список строк реальными данными из -Процессор.

Последним в верхнем списке функций будет значение использования COOP для интеграции библиотек AJAX и инкапсуляции пользовательской разметки и обработки. COOP расширяемый и с открытым исходным кодом. Существуют шаблоны для создания собственных тегов. Существуют функции основного сопроцессора CFC и некоторые дополнительные CFC, которые еще больше упрощают интеграцию. Суть в том, что это отличный способ упаковать библиотеки AJAX в ColdFusion.

SP: Как появился COOP? Почему это было создано?

Ну, у нас такая же плохая история, как у большинства программистов. Когда-то мы программировали процедурным программированием. После этого другие компании пришли в SOSensible и попросили нас собрать фрагменты других проектов, которые были созданы с помощью процедурного программирования. Простая концепция не требует спагетти-кода, но это только начинает происходить. Мы также хотели помочь многим нашим клиентам, у которых нет персонала, обученного более тонким аспектам шаблонов проектирования и всем остальным, что делает разработчика супер-гиком. Мы хотели оставить проекты .NET, PHP или Java, или обычный CF-разработчик мог бы сразу подключиться и «получить».

SP: Как вы вовлечены?

Я создатель COOP. Я начал программировать программное обеспечение около 1977 года. Я работал на многих платформах и со многими языками кода. Возможно, этот широкий взгляд на разработку побудил меня предоставить структуру без сложных, трудных для понимания методологий кодирования. Пожалуйста, не поймите меня неправильно — я думаю, что шаблоны дизайна работают отлично. Это просто не будет так, как большинство парней пишут код.
Пастор, который выполнил мою свадебную церемонию, сказал: «Величие — это глубина, заключенная в простоте», и для меня это то, чем занимается COOP. Это на самом деле было разработано больше для моей компании. Он был разработан таким образом, чтобы его можно было использовать для замены отдельных страниц для клиентов испорченными сайтами и для создания целых сайтов, которые приятно создавать и пересматривать. Мы подумали, что это так увлекательно, что просто хотели поделиться им с остальным миром ColdFusion.

SP: Когда разработчик должен искать COOP? Что это значит для этого?

Ну, как разработчик, вы не хотели бы программировать элементы презентации, как будто они были объектами? Это означает, что вы можете сделать такие вещи, как назначить сбор данных для идентификатора элемента страницы разметки из бизнес-логики, а затем установить стандартный или текущий идентификатор этого элемента. Это то, что мы подразумеваем под «preDOM». Допустим, у нас была группа переключателей, и мы использовали <coop:radiobuttonlist id="idOption"/> В onPageStart()_init Это будет выглядеть так: _init.idOption.data = getOptions() Внутри теги COOP могут обрабатывать такие вещи, как списки радиостанций. Они умно определяют, являются ли данные списком, массивом или набором записей на основе запросов, и обрабатывают их соответствующим образом.

Другие интересные функции COOP включают библиотеки ICE (Integrated COOP Element), которые упаковывают домены расширений COOP для таких вещей, как плагины jQuery, timyMCE и так далее. COOP использует тег sosContent, чтобы облегчить интеграцию JavaScript и CSS для разработчика и дизайнера. Ядро с открытым исходным кодом, и оно разработано таким образом, что настройки обычно не конфликтуют с обновлениями ядра. COOP также обладает мощью KIT, которая позволяет разработчикам упаковывать общие элементы и размещать один тег на странице, а не вставлять большие блоки кода.

Есть также преимущества с точки зрения дизайнера, что является преимуществом для разработчиков, поскольку создает лучшую рабочую среду. Дизайнеры, с которыми мы брали интервью, снова и снова говорили нам, что им не нравится программировать. Проблема заключается в том, что даже когда они не программируют автоматизированное веб-приложение, им приходится разбираться с нашим кодом, не испортив его. COOP позволяет дизайнерам сконцентрироваться на презентации, а мы сосредоточимся на предоставлении контента и бизнес-логики.

SP: Каковы предварительные условия для использования COOP? Есть ли какие-либо предварительные знания, которые помогут новым пользователям? Использует ли он какие-либо другие структуры, которые могут упростить или усложнить вещи?

COOP будет работать с другими фреймворками, но не требует их. Вы можете использовать COOP внутри других платформ и использовать такие вещи, как базы данных или IOC, внутри COOP. Суть в том, что он интегрируется и позволяет интеграцию.

SP: Что отличает COOP от других фреймворков?

Если вам нравится ColdFusion, мы думаем, что вы будете стремиться к COOP. Нам нравится говорить, что COOP больше похож на ColdFusion, чем на любые другие фреймворки. Это не отнимает ничего от многих других замечательных работ — на самом деле, мы бы хотели, чтобы они поняли концепцию и создали нечто подобное для своих пользователей. Вероятно, это самый простой фреймворк, если вы хотите интегрировать библиотеку Ajax и сделать это в стиле ColdFusion. Ознакомьтесь с некоторыми из наших библиотек ICE, и вы увидите, как простая мощь библиотек Ajax смешивается с объектно-подобным взаимодействием разметки. Теги могут быть обновлены. Новые теги могут быть добавлены. Нет необходимости ждать следующей версии ColdFusion! Это действительно решение с открытым исходным кодом, которое работает так же хорошо, как и на корпоративном хостинге.

SP: Есть ли замечательные примеры COOP «в дикой природе»?

Ну, у нас пока нет ни амазонок, ни гуглов …

С.П .: Конечно. Ну, вы можете дать нам взглянуть на код?

Нет проблем. Вот как мы можем построить простой сегмент страницы COOP.

 OLD SCHOOL (Procedural code at its finest)  
<cfoputput>  
<select id="myFruit" name="myFruit">  
<cfloop list="apple,blue berry,cherry,mango,orange" index="iFruit">  
<option value="#iFruit#">#iFruit#</option>  
</cfloop>  
</select>  
</cfoutput>  
 
STAGE 1: Prototype  
<!--- Notes:  
We're passing in a list but coop can spot  
if the data is a list, array of structures or  
a query and knows how to handle that internally.  
--->  
<coop:selectlist id="myFruit"  
data="apple,blue berry,cherry,mango,orange">  
 
STAGE 2: Refactor  
(in the word of one developer, the markup page gets "elegant")  
<coop:selectList id="myFruit">  
 
(the co-processor page now adds this...)  
<cfscript>  
/* The init is the base for the page object modeling.  
* The myFruit is the ID of the object we are programming  
* before creating it. A.K.A. preDOM.  
*/  
_init.myFruit.data = "apple,blue berry,cherry,mango,orange";  
</cfscript>  
 
STAGE 3: Enhance  
<cfscript>  
/* Enhancing the code to real data and control  
* by setting attributes in code rather than  
* inside the markup.  
*/  
_init.myFruit.data = getFruit();  
_init.myFruit.valueField = "fruit_ID"; // id field in recordset  
_init.myFruit.displayField = "fruit"; // fruit name in recordset  
</cfscript>

Существует много, намного больше того, что было встроено и упрощено в COOP. Программирование сайтов с помощью этой технологии позволяет дизайнерам выполнять свою работу без цикла if… then… else, и всего того, что нам нравится разработчикам. Это позволяет нам контролировать страницу, не касаясь дизайна, поэтому нас не так часто обвиняют в том, что мы испортили внешний вид! И если вы работаете только на одном сайте, он позволяет вам сосредоточиться на одной вещи за один раз, и это здорово.

SP: А как насчет лицензирования, сообщества, поддержки и документации?

Наша модель лицензирования указана по адресу http://coop.riaforge.org/ — в основном, поскольку COOP является нашим творением, и мы не несем ответственности за ее использование, другие могут использовать ее для любого проекта. Если у пользователей есть какие-либо вопросы, они могут просто задать их, и мы сообщим им, как это работает в вашем сценарии. Для поддержки сообщества у нас настроена группа Google , а первоначальная документация доступна на нашем сайте .

SP: Что будет в будущем для COOP?

Во-первых, мы работаем над версией 2.0, но мы собираемся выпустить версию 1.5, прокладывая путь. Изменения включают в себя простые вещи, такие как полное модульное тестирование на бэкэнде для проверки всех COOP CFC и тегов. Мы пересмотрели нашу кодовую базу, чтобы она стала более переносимой и не была привязана к корню сайта. Теперь мы обрабатываем структуру массивов, и в качестве источника данных можно использовать XML. Что касается документации, мы работаем над видео YouTube для каждого тега и аспекта платформы.

В будущем мы внедрим библиотеки ICE (TinyMCE, jQuery Grid, Flot, YUI Editor и многое другое). Это библиотеки в стиле COOP («ColdFusionified», если хотите), коллекции, которые были переработаны для более легкой работы и более эффективной интеграции благодаря возможностям ColdFusion.

SP: Где люди могут найти больше информации о COOP?

Базовым сайтом для COOP является http://coop.riaforge.org, и вики там, на http://coop.riaforge.org/wiki/ , предлагают много информации.

Наши первоначальные документы можно найти на нашем сайте — они должны начать большинство людей.

Опять же, посмотрите новые видео YouTube, чтобы узнать больше о том, как использовать все замечательные функции COOP. Если вы хотите принять участие в бета-версии 1.5, перейдите на наш форум , который находится по адресу RIAForge. На UGTV Чарли также есть онлайн-презентация с момента выхода продукта на версию 1.0.