Постановка задачи
Ниже будет рассмотрена вольная интерпретация архитектуры MVC (Модель-вид-контроллер), применительно к скрипту блога. Сам блог ещё не существует, а его создание предполагается начать от уровня представления. Здесь описывается конкретный подход к реализации взаимодействия между сервером и собственно страницей (в браузере) с применением технологии Ajax. Будут рассмотрены основные сценарии.1. Серверная сторона
Скрипт блога может быть реализован на любом языке. На сервер возлагается ряд обязанностей по поддержке двух уровней - модели и контроллера.1.1 Модель
Модель реализует работу с базой данных, предоставляет элементарные действия по включению, чтению, изменению экземпляров сущностей.
Предметная область включает (для рассматриваемого случая): сообщение (заголовок, тело, другие поля); комментарий (тело). Сообщение имеет некоторое количество комментариев.
1.2 Контроллер
Контроллер рассматривается как диспетчер, принимающий запросы и формирующий ответы. Каждый запрос (за исключением некоторых) трансформируется в отклик, который содержит блок данных. То есть он не формирует всю страницу целиком, а отсылает порциями. Эти порции информации уже на уровне представления распределяются по странице (c использованием JavaScript). Отмечу, что блоки информации, отсылаемые клиенту даются в HTML-нотации, поэтому происходит некоторая подмена понятий. Контроллер, который использовал бы XML-нотацию или JSON был бы полноценным контроллером. А так... В общем выбран путь наименьшего сопротивления, так как проект не ориентируется на архитектурную эволюцию и конечную универсальность.
Кроме того, контроллер формирует два полных представления (это тот самый случай исключения): страницу блога (состоящую из полнотекстовых сообщений) и страницу сообщения (которая, помимо самой записи, включает список комментариев).
2. Уровень представления
На этом уровне должен быть реализован механизм отправки запроса, получения ответа и отображения полученной информации.
2.1 Технология Ajax
Ajax именно этим и занимается. Выбор фреймворка не принципиален (я использую prototype). На уровне представления необходимо реализовать ряд операций, которые завязаны на отправке запросов.
2.2 Операции
СозданиеСообщение - createPost()
+ Запрос формы под новое сообщение - getFormForNewPost()
Комментарий - createComment()
Чтение
Список сообщений - getPosts()
Сообщение - getPost(post_id)
Список комментариев - getComments()
Обновление
Сообщение - updatePost(post_id)
+ Запрос формы, содержащей сообщение - getFormForPost(post_id)
Удаление
Сообщение - deletePost(post_id)
Комментарий - deleteComment(comment_id)
2.3 Структура страницы и сфера ответственности методов
Примерная структура страницы для сообщений (стрелкой показано, какая функция заполняет/изменяет блок; буквой "x" обозначается идентификатор сообщения):
← getFormForNewPost()← getPosts(), createPost()← getPost(post_id), deletePost(post_id)← getFormForPost(post_id)← updatePost(post_id)
