Привет и снова добро пожаловать в нашу серию CF Camp 2018: Безумие в Мюнхене! На протяжении всей серии мы обсуждали горячие вопросы, которые будут обсуждаться на предстоящем в этом году CF Camp, единственной конференции CF в Европе. Сегодня мы поговорим об ORM или объектно-реляционном отображении. Часто называемый Вьетнамом компьютерных наук из-за его кажущейся бесконечной сложности, ORM может быть предметом споров среди специалистов по компьютерной графике. Однако ORM не лишен преимуществ. Есть некоторые функции, которые по-прежнему делают ORM актуальным и полезным. Эта статья вдохновлена ​​предстоящей мюнхенской сессией Виль де Брюина под названием ORM Love and Hate. Там он обсудит ORM, как это относилось к ColdFusion на протяжении многих лет. Он также продемонстрирует способы упростить ORM с помощью модуля ORM ColdBox.

«Для разработчиков ColdFusion, какую новую технологию или библиотеку ColdFusion, с которой у вас будет возможность окунуться, вы собираетесь изучить? Я думаю, что это поможет сделать ColdFusion лучше, сделать его более живым, и это заставит разработчиков, занимающихся ColdFusion, больше гордиться тем, что они делают. Когда вы разговариваете с другим разработчиком, не являющимся разработчиком ColdFusion, вы можете с большей гордостью говорить с ним о современных методах, которые вы используете, и вам не нужно стыдиться устаревшего приложения ColdFusion, которым вы управляли, которое было написано, как будто это 1999 год, правильно ?»

-Брэд Вуд, архитектор программного обеспечения и евангелист платформы Ortus Solutions

Из эпизода CF Alive «028 шаблонов проектирования для потрясающей архитектуры приложений (16 шаблонов) с Брэдом Вудом».

Как и в любой другой теме, вы должны сначала иметь четкое представление о том, что это такое, прежде чем вы сможете дать по ней какую-либо обоснованную оценку. Итак, большой вопрос…

Что такое ORM?

ORM означает объектно-реляционное сопоставление. ORM, как определено Википедией — это метод программирования для преобразования данных между несовместимыми системами типов с использованием объектно-ориентированных языков программирования. По сути, это создает виртуальную базу данных объектов, которую можно использовать внутри языка программирования.

Многие современные языки программирования, включая ColdFusion, являются объектно-ориентированными. Однако все наиболее широко используемые сегодня базы данных считаются реляционными, а не объектными базами данных. Например, SQL Server, MySQL и Oracle. Это создает потребность в механизме перевода между ними.

Введите ОРМ.

Приведенное выше объяснение, вероятно, также является одним из самых больших преимуществ для ИТ-директоров. В качестве ИТ-директора вашему предприятию или команде может потребоваться доступ ко многим из этих внешних баз данных или реляционной базе данных, созданной внутри компании. Без использования ORM доступ к такой информации был бы в лучшем случае затруднен.

Но… ORM сам по себе может стать чрезвычайно сложным. Тем не менее, это необходимое зло для многих ИТ-директоров и разработчиков CF. Тем не менее, Луис Маяно — создатель ColdBox, CommandBox, ContentBox и президент Ortus Solutions — твердо верит в силу ORM, признавая при этом некоторые его недостатки.

«Я имею в виду, что мы можем честно подтвердить, что благодаря использованию ORM наша производительность увеличилась как минимум на 30–40 %. Это действительно взрыв производительности. Но это инструмент. Он не предназначен для всего, и поэтому иногда люди выпадают из колеи, потому что чувствуют, что должны использовать его для всего. И вот когда они терпят неудачу. Другой сбой - это значения по умолчанию. В производительности есть много ручек и поворотов, и многие люди говорят: «О, ORM просто ужасен в производительности». Реальность такова, что мы запускаем его на всех наших системах, и наше среднее время JDBC находится в диапазоне 30 миллисекунд. Так что это может быть очень быстро и эффективно».

Итак, каковы очевидные преимущества использования ORM?

  • Они предлагают объектно-ориентированную модель баз данных.
  • Разработчикам объектно-ориентированных языков не нужно менять парадигмы при входе в базу данных.
  • Большинство зрелых ORM оснащены построителем SQL-запросов.
  • Они помогают управлять процессом создания базы данных.
  • Они помогают управлять изменениями схемы базы данных.
  • Независимость от поставщиков баз данных
  • Кэширование
  • параллелизм
  • Оптимизация производительности

А как насчет ограничений ORM?

К сожалению, ни одна система не идеальна, и для ORM это звучит правдоподобно. Существуют некоторые ограничения, которые поддерживает ORM, например:

  • В них могут сохраняться только Объекты-Значения и Сущности.
  • Существует установленный стандарт для установления внешних ссылок из объектов-значений и сущностей при размораживании из хранилища данных.
  • Структурам данных, которые ранее были неограниченными по размеру в памяти, должно быть присвоено максимальное значение размера из соображений производительности.(т. е. varchar(255) вместо длинного текста)
  • Объекты, моделирующие машинные ресурсы, не могут быть сохранены. Это связано с тем, что они не могут быть синхронизированы с машиной, которая их освобождает.
  • Должен быть установлен способ создания объекта из состояния, отличного от его общедоступного API.

ORM-шаблоны

ORM поставляется в нескольких шаблонах, два из которых являются наиболее распространенными.

  1. Активная запись
  2. Каждая сгенерированная таблица теперь представлена ​​как класс. Затем каждая строка этих таблиц транслируется в объект соответствующего класса. В настоящее время объекты знают, как сохранять себя в базе данных.
  3. Объект доступа к данным
  4. В этом шаблоне доступ к базе данных делегируется выделенным объектам доступа к данным. Объекты доступа к данным (или DAO) могут сохранять каждый объект и знают, как создавать объекты из базы данных.

Как ИТ-директор, вы должны взвесить возможность использования ORM или нет. ORM может быть исключительным инструментом при правильном использовании. Он также может оказаться необходимым злом для тех, кто не знаком с его процессами. В любом случае, общее понимание ORM должно быть установлено перед любым использованием. Для получения дополнительной информации на основе ORM ознакомьтесь с дипломной работой Тома ван ден Брука Объектно-реляционные сопоставления: первый шаг к формальному подходу.

С чисто операционной точки зрения ORM позволяет вам манипулировать объектами и сохранять их в базе данных. В ColdFusion Adobe использует отраслевой стандарт Hibernate для всех своих потребностей ORM. Это может значительно упростить процессы CRUD (создание-чтение-обновление-удаление) и создать более объектно-ориентированный код.

Наряду с Hibernate Ortus Solutions предоставляет модуль ColdBox ORM. Этот модуль значительно расширяет возможности Hibernate и позволяет гораздо проще и эффективнее использовать ORM. Модуль ColdBox ORM оснащен многими функциями, такими как:

  • Уровни виртуальных услуг
  • Шаблоны активной записи
  • Критерии и запросы с отдельными критериями
  • Композиции сущностей
  • Население
  • И многое другое!

Согласно Ortus Solutions, концепция модуля ColdBox ORM выглядит следующим образом:

«Идея этого класса поддержки состоит в том, чтобы предоставить очень хороший базовый или родительский сервисный уровень, который может взаимодействовать с ORM ColdFusion через режим гибернации и объекты, основанные на поддержке шаблонов Hibernate в Spring. Это означает, что вам не нужно создавать CFC сервисного уровня для работы с объектами ORM».

Это делает модуль ColdBox ORM важным приложением для использования при работе с ORM внутри вашего ColdFusion.

Однако для тех, кто не использует модуль ColdBox, давайте взглянем на запуск ORM с помощью Hibernate на базе ColdFusion.

«Выполнив разработку на других языках, вы просто не имеете того же удобства, что и все встроенные методы, а затем вы добавляете поверх него ColdBox, и у вас есть все эти другие соглашения и сверхжесткие методы, которые вы может использовать. С другими языками вы снова и снова изобретаете колесо, чтобы решать проблемы, которые уже были решены в CFML много-много лет назад.

Для меня важно найти язык, который дает мне лучший набор инструментов для начала, самый большой набор инструментов для работы, и если у меня есть все эти инструменты, и они всегда доступны и удобно собраны, тогда это делает мне стало намного проще быстро создавать и развертывать мощные приложения без ошибок. Вот почему я в восторге от CFML, и я действительно продолжаю в том же духе, потому что часто думаю, что сообщество разработчиков CFML может быть злейшим врагом самому себе, потому что мы не тратим достаточно времени на оттачивание и изучение того, как мы делали это так много лет, как мы можем делать что-то по-другому?» — Джон Клаузен, президент Silo Web

Из эпизода CF Alive «011 Portable CFML с облачными развертываниями, микросервисами и REST с Джоном Клаузеном».

Конфигурация

Приложение.cfc

Для использования ORM в файле application.cfc должны быть две настройки.

  1. Источник данных
  2. ORM Enabled установлен в TRUE

Хотя ORM будет работать с любой современной базой данных, источником данных и базой данных по умолчанию для ColdFusion являются cfartgallery и Derby DB соответственно.

Дополнительные настройки для ORM можно найти в структуре под названием — вы правильно догадались — ormsettings.

LearnCFinaWeek.com предоставляет отличный пример для начала работы с ColdFusion ORM.

component { this.datasource = "cfartgallery"; this.ormEnabled = true; this.ormSettings = { logsql : true }; this.invokeImplicitAccessor = true;

В этом примере для logsql установлено значение true. Это позволяет SQL, созданному Hibernate, отображать отладочную информацию ColdFusion. Используйте cfclocation, чтобы определить, где будут размещены постоянные cfc. Когда это будет сделано, dbcreate автоматически сохранит изменения, внесенные как в базу данных, так и в модель.

Сущности

Сущность — это класс, который специально помечен для одной таблицы базы данных. Это следует тому же принципу, что и шаблон Active Record, описанный выше в предыдущем разделе для ИТ-директоров. Свойства могут быть сопоставлены с каждым столбцом таблицы. Каждое свойство будет иметь геттеры и сеттеры, оба из которых могут быть сгенерированы автоматически. Они также могут быть перезаписаны.

Отношения

Отношения в ORM очень похожи на отношения по внешнему ключу между двумя таблицами, за исключением того, что теперь они являются объектами. Эти отношения обычно подпадают под один из трех типов отношений:

  1. Один к одному
  2. Один ко многим
  3. Многие ко многим

Обычно в большинстве случаев рекомендуется использовать несколько отношений «один ко многим», а не «многие ко многим». Это поможет избежать путаницы в дальнейшем. ColdFusion автоматически добавит функции к объектам для управления отношениями.

Извлечение данных

При извлечении данных вы будете использовать две основные функции.

  1. объектLoad
  2. ormExecuteQuery

Для более сложного поиска данных вы можете использовать HQL. Это язык запросов Hibernate. Он очень похож на SQL по своей структуре. Однако в HQL ormExecuteQuery будет возвращать результаты так же, как и entityLoad.

У вас также есть возможность сериализовать через JSON. Функция serializeJSON может сериализовать все ваши сущности для вас в нотацию объектов JavaScript.

Работа с данными

Добавление записей

Добавить запись с помощью ORM просто. Используйте функцию entityNew следующим образом:

  • Используйте функцию entityNew.
  • Первый аргумент - имя объекта
  • Второй аргумент (необязательный) - структура данных
  • Используйте функцию entitySave

Посмотрите на этот пример из Learn CF in a Week, поскольку они создают отношения между искусством и художником.

transaction { art = entityNew( "art", { name : "Painting of TV", price : 200, isSold : false } ); entitySave( art ); artist = entityNew( "artist", { firstname : "John", lastname : "Doe" } ); artist.addArt( art ); entitySave( artist ); }

Обновление и удаление записей

Обновление и удаление записей также относительно просто. Процесс обновления записей выглядит следующим образом:

  • Получите объект, используя другую подпись с третьим аргументом в качестве логического значения, которое необходимо установить как истину.
  • Измените значения с помощью неявных сеттеров.
  • Все измененные значения будут сохранены после завершения транзакции.
  • Изменения можно отменить с помощью функции transitionRollback().

Чтобы удалить запись, просто извлеките одну запись и используйте функцию entityDelete.

Ключевые советы и рекомендации по ColdFusion ORM

Сброс объектов

Иногда при использовании функции writedump CF пытается отобразить информацию о взаимосвязи. Это часто может привести к отображению гораздо более важной информации. Чтобы предотвратить это, просто предоставьте некоторые дополнительные атрибуты.

Нулевые значения

Иногда ColdFusion не может получить объект при вызове. Когда это произойдет, присвоенное значение будет нулевым.

Например, если идентификатор определенного объекта очень высок, может возникнуть ошибка. Вместо ошибки переменная art устанавливается в нулевое значение. Это можно проверить с помощью переменной isNull.

формаПерезагрузить

Эта функция исключительно полезна. Всякий раз, когда в конфигурацию объекта вносятся какие-либо изменения, вы должны использовать функцию ormReload, чтобы любые изменения вступили в силу. Это очень похоже на перезагрузку пользовательского интерфейса при внесении изменений в интерфейс.

ORM — это одна из граней информатики, которая действительно может задеть вас за живое. Тем не менее, мы не можем просто избавиться от него. Он исключительно полезен при правильном применении. Возможно, нам всем следует уделить время тому, чтобы понять, что именно ORM делает для нас. Это помогает нашему CF оставаться живым и более динамичным, поэтому, возможно, нам следует немного больше выразить нашу признательность этому бедному неправильно понятому созданию программирования.

О спикере:

Уил получил высшее образование в области наук об окружающей среде и начал свою карьеру в качестве микробиолога-исследователя. Ему потребовалось почти 10 лет, прежде чем он продолжил работу в качестве специалиста по информационным технологиям. В 1994 году он основал Site4U BV, в то время компанию, специализирующуюся на разработке программного обеспечения и веб-дизайне. Одним из его первых приложений был поиск голландских интернет-провайдеров по локальным расценкам, написанным на PHP/Mini SQL, но вскоре он обнаружил, что такие интерактивные веб-сайты легче создавать с помощью DBML с использованием Cold Fusion от Allaire.

А чтобы продолжить изучение того, как сделать ваши приложения ColdFusion более современными и живыми, я рекомендую вам загрузить наш бесплатный контрольный список лучших практик ColdFusion Alive.

Потому что… возможно, вы несете ответственность за критически важное или приносящее доход приложение CF, которому вы не доверяете на 100 %, где внедрение новых функций — это болезненный специальный процесс с медленным выполнением даже для простых запросов.

Что делать, если у вас нет плана действий на случай внезапного ухода разработчиков или отключения сервера? Возможно, каждый раз, когда на вашем сайте работает новый фрилансер, что-то ломается. Или доступность, безопасность и надежность вашего приложения плохие.

И если вы зависите от ColdFusion для своей работы, то вы не можете позволить своим методам разработки CF умереть на корню.

Вы делаете ставку на то, что все будет хорошо, используя те же самые старые способы создания приложений на этом одном языке — навсегда.

Достаточно, чтобы ваш коллега-разработчик CF уволился или ваш ИТ-директор решил покинуть (ошибочно) воспринимаемый тонущий корабль CFML, и вы можете потерять все — свой проект, с трудом завоеванные навыки CF и, возможно, даже свою работу. .

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

Простые передовые методы работы с ColdFusion, которые помогут вам добиться успеха, что бы ни случилось дальше

Контрольный список лучших практик ColdFusion Alive

Современные передовые методы разработки ColdFusion, которые снижают стресс, неэффективность, затраты на жизненный цикл проекта, одновременно увеличивая скорость проекта и инновации.

Легко создавайте согласованную серверную архитектуру для разработки, тестирования и производства.

современная тестовая среда для предотвращения распространения ошибок

√ Автоматизированные инструменты непрерывной интеграции, которые хорошо работают с CF

переносимая среда разработки, встроенная в вашу кодовую базу… бесплатно!

Узнайте об этих и многих других стратегиях из нашего бесплатного Контрольного списка лучших практик ColdFusion Alive.

Первоначально опубликовано на сайте teratech.com 30 октября 2018 г.