Задать вопрос
Cobalt
@Cobalt
Программист - этим все сказано

Оцените велосипед

Хочется узнать мнение профи по поводу минусов такого решения.

Задача которая стояла - жестко отделить верстку от кода на Java. Использование классических java фрэймверков типа jsp и jsf исключается. Подразумевается что верстка богата JavaScript и очень сильно зависит от него. Много JQuery плагинов и всяких Ajax штучек с асинхронной загрузкой.

Можно было конечно применить связку что-то вроде Angular+RESTful но нужно было хранить состояние, т.е сессия. Посему было решено писать на сервлетах.

Мысль в следующем. Есть глобальный сервлет Controller - сам по себе нигде не используется. В нем только определены методы получения post и get запросов и отдача результатов. У него есть куча детей, которые аннотациями собственно и закрепляются за нужными урлами.

Например вызывают урл /app/users/profile/1 На урл /app/users замаплен контроллер Users в котором есть метод prfile. Родительский контроллер проверяет наличие этого метода в Users и вызывает его, передав в качестве параметра id юзера = 1. В Users вся логика обработки конкретной страницы. Он получает его шаблон, неважно ткуда (БД, файл и т.п), в простейшем случае представляющий собой html с "чанками" которые подменяет на реальные данные (возможно использовать люой существующий шаблонизвтор) и отдает его через метод родителя обратно в браузер.

Также есть, например контроллер Save замапленный на /app/save и у которого куча методов для обработки данных всех форм. Родительский Controller в зависимости от урла вызывает нужный метод.

Для ajax вызовов свой дочерний контроллер который отдает даынне в json например формате.

Т.е чем-то смахивающая на REST реализация + мальца от MVC. Я в кратце описал оcнову - главное что у нас есть родительский сервлет который дергает методы детей замапленных на конкретные урлы.

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

Изначально идея взята была отсюда habrahabr.ru/post/120715 но прошу учесть что у меня все-таки не rest а отдача html шаблонов
  • Вопрос задан
  • 2628 просмотров
Подписаться 5 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
@green_turtle
Можно было конечно применить связку что-то вроде Angular+RESTful но нужно было хранить состояние, т.е сессия. Посему было решено писать на сервлетах.

Для этого не надо придумывать велосипед. Каноничный REST, конечно, должен быть стейлесс, но это правило можно не соблюдать. К вашим услугам какой-нибудь Spring MVC - делайте на нём REST с сохранением состояния или без сохранения. Тот же Spring MVC имеет content negotiation - в зависимости от запроса, отдавать определённый формат данных - например /users.json вернёт json, а /user.html вернёт ваш html (отрендереный на сервере). И причём для этого вам нужен всего один контроллер (+пару аннотаций).
Что-то мне кажется вам отлично подойдёт angular+rest. Объясните, какое состояние вы хотите хранить?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы