Техническая реализация системы
Система представляет собой простейшее веб-приложение реализованное с использованием паттерна проектирования (design pattern) Модель-Вид-Контроллер (название по GOF). В данном приложении:
Объект пользователь (либо User либо AnonymousUser) храниться в сессии.
В сессии сохранён массив объектов Album, доступный для модификации.
Я использую упрощённую процедуру аутентификации, чтобы уменьшить и упростить код приложения.
Итак, описание системы в терминах Модель-Вид-Контроллер:
Модель
В нашей системе используется следующая модель:
Заметим что, класс User расширяет (наследует) класс AnonymousUser. Каждый альбом (класс Album) имеет атрибут title и ссылку на владельца альбома - класс User, следовательно первое ограничение - анонимный пользователь не может быть владельцем альбома. Альбомы хранятся в объекте AlbumList реализующим методы добавления, удаления и поиска альбомов.
Вид
Отображение осуществляется с помощью шаблонов. Данный подход позволяет нам разделить отображение от остальных частей системы, кроме того, эти шаблоны, достаточно простые для интуитивного понимания. В приложении используется 2 шаблона:
view.vm – отображает логин текущего пользователя (или Anonymous), ссылки на login/logout, список альбомов, форму для добавления нового альбомa
login.vm – отображает 2 ссылки для регистрации под разными пользователями.
Контроллер
В качестве контроллеров выступают 2 сервлета (я намеренно не использую Struts, так как считаю его использование в подавляющем большинстве случаев антипаттерном).
LoginServlet – сервлет осуществляющий логин пользователя.
ViewServlet – сервлет осуществляет подготовку списка альбомов и обрабатывает добавление/удаление альбома по переданному title.
Кроме того, реализован фильтр (EntranceFilter) который запускается перед каждым запросом.
На данный фильтр возложена обязанность установления пользователя в AnonymousUser если пользователь не найден в сессии, и начальной инициализации массива альбомов.