Подтвердить что ты не робот

Расширение ColdFusion с широкими возможностями UDF

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

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

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

  • Создайте экземпляр базового Utils CFC в области приложения. Это метод, который я использовал чаще всего. Все функции доступны в широком доступе, но если я создам один и тот же CFC из нескольких приложений, тогда у каждого из них будет своя собственная область приложения - это означает, что каждый из них должен создать экземпляр собственного базового Utils CFC. В этом нет ничего плохого, но мне кажется, что я недостаточно инкапсулирую ХФУ. Я не хочу ссылаться на область приложения изнутри CFC.

  • Создайте базу Utils CFC и сделайте все остальные CFC. Это прекрасно работает, и это означает, что CFC может ссылаться на функции Utils непосредственно из области CFC THIS. Однако это означает, что функции Utils хранятся в памяти для каждого CFC. Это также не соответствует концептуально, так как мои другие CFC не имеют отношения к CFC Utils.

  • Внесите мою базу Utils CFC в мои другие CFC. Другой метод, с которым я играл, - это создать экземпляр базового Utils CFC в области приложения, но затем передать это как объект для аргумента в других моих CFC. Это работает для меня концептуально и для инкапсуляции. Точно так же, как я установлю свои источники данных в моем методе init, я могу сделать то же самое с моими UDF. Это связано с тем, что UDF включены в каждый CFC. Когда я сбрасываю все свои CFC, я получаю каждый UDF несколько раз - однако, когда я передаю экземпляр объекта, я предполагаю, что он не занимает лишнее пространство памяти. Если кто-нибудь сможет подтвердить это, было бы полезно - я просто предполагаю! Единственная реальная проблема, с которой я сталкиваюсь, заключается в том, что она кажется немного запутанной.

  • Попросите мою прикладную CFC расширить мой Utils CFC. Это то, что, по-видимому, делает множество фреймворков. Я не использовал этот метод, но я уверен, что есть плюсы и минусы.

  • CFInclude мои UDF из отдельных шаблонов, непосредственно в Application.cfc Это функционально похоже на создание экземпляра в области приложения.

  • Добавьте мои UDF на сервер Components.cfc Это теоретическая идея: я могу поддерживать одну копию базовых Utils и быть уверенным, что все на сервере может получить к ним доступ. Однако, если я хочу запускать приложения на нескольких серверах, тогда им все эти функции нужны. Кроме того, любое обновление сервера может перезаписать компоненты. Это просто похоже на взлом ядра - я уверен, что мы все можем искупить от горького опыта, это плохо.

Итак - мой вопрос таков: Какова наилучшая практика для расширения CF с UDF в элегантном и многоразовом режиме? Любой из вышеперечисленных вариантов или что-то, о чем я не думал?

4b9b3361

Ответ 1

Если вы действительно обеспокоены структурой и сохраняете независимость, даже не начинайте с одиночных или наследований, расширяющих функциональность. Вместо этого добавьте базовую функциональность в ColdFusion, добавив вашу некомпонентную библиотеку во время выполнения/запрос, см. Руководство разработчика ColdFusion. Это не магически решает все проблемы, но, по крайней мере, это правильный способ реализации функций общего назначения.