| Собираюсь соорудить свой небольшой фреймворк, чтобы на его основе потом клепать что-то.
Что придумал сейчас:
1) есть класс фреймворка, который загружает необходимые модули в нужном порядке. Применяется делегирование. То есть, работающие модули будут включены в основной модуль фреймворка и он будет вызывать их и получать от них ответы явно.
2) необходимые модули указываются в конфиге. Там же указывается порядок их загрузки. Там же указываются события, при котрых нужно вызывать тот или иной модуль.
3) обработка запроса делится на события:
создание объекта фреймворка,
установка объекта фреймворка и загрузка с установкой всех необходимых модулей,
парсинг запроса,
подготовка ajax-ответа
подготовка простого ответа
выдача
Для каждого модуля указывается в какой момент он должен быть вызван. Например, если модуль должен обрабатывать аякс-запросы и просто запросы (допустим, модуль навигации, который должен вывести начальное дерево сайта и поддерживать аякс-догрузку элементов), он вызывается при формировании аякс-ответа и просто ответа. Разумеется, если будет сформирован какой-то аякс-ответ, то простой ответ формироваться не будет и будет происходить выдача.
Собственно, все работает. Если смотреть с точки зрения MVC, у меня получается один контроллер - это главный класс, который загружает все остальные и парсит запрос.
А вот с моделью и прдеставлениями немного нестандартно. Моделей у меня получается много. По количеству модулей.
Внимание, вопрос. Как при такой архитектуре максимально удобно организовать представление? Стоит ли делать один класс представления, или может быть, сделать много маленьких классов - по одному на модель? Честно говоря, склоняюсь ко второй возможности. Трудность представления заключается в том, что непонятно как придут данные от модели. Это может быть просто скаляр, массив любой вложенности и так далее. В общем, совершенно разные данные. Как организовать их красивую обработку и выдачу?
Учитываем, что, например, при формировании одной страницы, будут задействованы разные модули. То есть, один сделает мне меню, другой - контент, третий - горячие предложения, четвертый - голую тетку в шапке сайта. Все эти выдачи нужно организовать, запихнуть в одну страницу и выдать.
При этом, нужно сохранить возможность вывода предупреждения. Например, тетки сегодня на месте нет и вообще, у нее болит голова. Поэтому на этом месте нужно написать "извините, у тетки болит голова. Сегодня она раздеваться не будет."
Есть идеи-предложения? | |