Создание вашего собственного веб-фреймворка - PullRequest
1 голос
/ 13 января 2010

Я программист Coldfusion, и да, я знаю, что существует множество отличных сред Coldfusion.

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

Но чтобы попасть туда, нам нужна настраиваемая конструкция с согласованной бизнес-логикой и правилами.

Мне нужно медленно переместить их в отдельный дисплей и логику ...

Я не заинтересован ни в каких пламенных войнах, какие рамки использовать и т.д. и т.д ...

Что меня интересует, каковы наиболее важные функции в создании вашей собственной веб-инфраструктуры?

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

  1. Монитор отладчика / сервера, который работает на dev и production, даже если мы думаем, что мы используем Coldfusion 8 Standard, на dev мы можем использовать cf server monitor, но на производстве мы не можем. Поэтому я собираюсь включить бесплатный отладчик или монитор сервера с открытым исходным кодом ...

  2. Я хочу включить хорошую защиту между сценариями, чтобы я мог отвести нас от cfqueryparam и разрешить нам использовать cachedwithin, поскольку наша версия не поддерживает cfqueryparam и кэширование в запросе.

  3. Возможность переключения стилей для страниц и / или изменения макета содержимого ... Я немного поработал с Wordpress, и мне нравится его структура темы, но я ненавижу его производительность / время загрузки.

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

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

  1. Выяснив структуру моей папки / URL, которая имеет смысл и понятна человеку, я работал с Able Commerce в прошлом и ненавидел ее структуру URL.

Извините за скучный вопрос, и я не ожидаю, что вы сделаете мою работу :) Но некоторые логические предложения, ссылки на хорошие статьи по созданию фреймворков ... Я гуглил ...

Спасибо.

Ответы [ 6 ]

9 голосов
/ 13 января 2010

Помимо обязательного «Вы используете coldfusion?!? ... ха» здесь вы идете:

  1. Обработка URL, превращение / a / b / c в вызов вашего приложения
  2. Разбор ввода (GET, POST, PUT, DEL) в собственные структуры
  3. Файлы cookie и управление сеансами (хранилище сеансов SQL / Депонированные сеансы / подключаемые)
  4. Автоматическое создание сервиса (RESTful / SOAPy) независимо от

Они будут моими топ-4. Тогда:

  1. Абстракции MVC как базовые возможности фреймворка (я знаю!)
  2. ORM (я ненавижу это, но для мелочей все в порядке)
  3. Автоматическая проверка ввода, автофиксации элементов управления в GET / POST / DEL
  4. Механизмы аутентификации

Тогда, если вам скучно:

  1. CRM и шаблоны

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

Не беспокойтесь, если у вас нет нового замечательного способа приблизиться к нему.

3 голосов
/ 13 января 2010

Я также написал свой собственный фреймворк CF. Это того стоило, потому что фреймворк делает именно то, что я хочу, как я хочу, и очень гибок. Вот что я рекомендую:

  • Создайте библиотеку UDF, чтобы вы могли использовать CFScript везде, где это возможно.
  • Имейте шаблон отладки, который печатает все важные данные и запросы внизу каждого ответа HTML. Я также использую свой шаблон отладки для отправки по электронной почте сгенерированных пользователем ошибок со всеми соответствующими запросами, историей и данными запросов.
  • имеет функцию, которая позволяет выполнять запросы внутри CFScript. Наличие сопутствующих функций для защиты строки от атак с использованием SQL-инъекций (пример ниже).
  • Разделите каждый запрос на область и путь (например, / area / path / to / template). Это позволяет вам создавать собственную логику в зависимости от того, где на сайте находится пользователь. Удивительно, насколько полезна эта информация о местности для настройки сайта.
  • Не нравится Mach-ii и настраивать сайт в XML-файле. Просто поместите шаблоны в соответствующее место и загрузите их из index.cfm на основании запроса.
  • На любой странице, которая использует более пары строк установочного кода, поместите весь код в отдельный шаблон и включите его в верхней части вашей страницы. Это означает, что вы можете передать страницу графическому дизайнеру с меньшим риском того, что он испортит ее или потеряет.
  • Включите всю структуру с каждым сайтом. Соблазнительно пытаться связать отдельные сайты с общим каталогом фреймворка (т. Е. Через символические ссылки, псевдонимы или вызовы служб), но на практике ваша фреймворк будет развиваться по разным путям, поскольку клиенты будут нуждаться в особых настройках, которые могут нарушить работу других ваших сайтов.
  • Всегда делайте простоту первостепенной. Вы не хотите настолько портить среду, что не можете включать шаблоны из других проектов (например, коннекторы, которые поставляются с редакторами WYSIWYG). Ваше эмпирическое правило должно заключаться в том, что другой программист Coldfusion может начать использовать ваш фреймворк в течение часа без вашей руки.
  • Поместите ВСЕ ваши каркасные переменные в одну структуру, чтобы вы не загрязняли ваши области видимости каркасными переменными. Это также помогает другим пользователям узнать разницу между структурной переменной и переменной шаблона. Я использую fw.scope.varname для каждой переменной, которая будет отображаться в шаблоне страницы (т. Е. Области запроса и переменной).
  • Используйте ХФУ! Я не могу начать говорить вам, насколько они помогают в организации вашего кода. Я обычно создаю экземпляры всех своих CFC в начале каждого запроса, чтобы я мог легко получить доступ к их членам из CFScript, используя форму fw.mycfc.mymethod()

Пример функции CFScript SQL:

sql("SELECT * FROM "#fsafe(this.table)#" WHERE "#fsafe(my.field)#"='#vsafe(my.value)#';", my.cache_mins);

Где fsafe защищает имена таблиц / полей, а vsafe защищает строки от внедрения SQL (путем экранирования двойных или одинарных кавычек)

3 голосов
/ 13 января 2010

Моя первая мысль - делать это со временем и почти без намерения создать фреймворк.

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

Создайте это, а затем уточните на многих сайтах.

1 голос
/ 15 января 2010

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

0 голосов
/ 13 января 2010

Что касается # 3, одной из сильных сторон Coldfusion являются пользовательские теги, которые будут хорошо работать для пользовательских шаблонов и стилей. Я храню свои параметры страницы / атрибуты и содержимое в SQL или Memcached, а затем использую пользовательские теги для объединения шаблона с содержимым и параметрами. Это быстрый и простой в управлении.

cf_page - это пример пользовательской страницы, которую мы используем для абстрагирования html-шаблона от содержимого, js и темы страницы.

<cfset page = getPage(cgi.script_name)>
<cf_page title="#page.title#" theme="#page.theme#" pageLayout="[two column]" js="[list of js files to load]" jqueryVer="1.3.2" css="[list of css files to load]">
    Page content, additional custom tags, and/or cfincludes
</cf_page>

* Было бы проще разбить эту тему на более мелкие подвопросы.

0 голосов
/ 13 января 2010

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

Находясь в организации, у которой не было структуры, и пытаясь написать ее и медленно приводить ее в соответствие со стандартами, будьте готовы к тому, что она медленно будет означать МЕДЛЕННО. Принятие не является быстрым из-за того факта, что часто большие старые приложения часто имеют ТОННЫ существующей бизнес-логики, которые бывает трудно разделить на «проблемы», что, конечно, хорошо для большинства сред. Мне также показалось, что это сложно, потому что большинство разработчиков слишком заняты, выполняя свою повседневную работу, и у них мало времени, чтобы осваивать что-то новое, особенно в связи с приближающимися сроками.

Удачи в ваших усилиях!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...