MVC против Taglibs, мнения/альтернативы?

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

Сначала проблема

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

По моему опыту, страница также может быть изменена, поскольку клиенты любят менять функциональность или выворачивать весь сайт наизнанку при следующем «редизайне». Обычно это приводит к довольно утомительному проекту рефакторинга, где нужно переписать буквально ВСЕ.

Затем возникает проблема согласованности: на одной странице набор данных помещается в ModelView как «список», а на другой странице, где «список» может быть абстрактным, он помещается в ModelView как «specificList». Поддержание согласованности в течение жизненного цикла проекта становится утомительной рутинной задачей, и ее обычно избегают, но именно это происходит с чистым решением MVC.

Решение?

Итак, в недавнем проекте, который я унаследовал, я видел два решения, которые извлекают данные в pageView. Первый довольно уродлив, используя jsp:include для вызова jsp-страницы и запуска другого контроллера.

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

Так что в этом проекте мне пришлось реализовать «редизайн», и все решения для извлечения данных значительно облегчили мою работу, однако в тех точках, где они использовали внедрение данных (MVC), это было головной болью (я не специалист). разработчик Java) и разработчики Java, чтобы помочь там, где мало кто.

Кроме того, taglibs, когда они написаны правильно, могут быть записаны только один раз, тогда как использование внедрения данных (MVC) может стать дочерним элементом, о котором вам постоянно нужно заботиться (помимо jsp).

Пример библиотеки тегов

Допустим, у нас есть services.tld со следующими определениями/реализациями тегов.
- getEmployeeAddress
- getEmployees

<services:getEmployees filter="a">
   <!-- loop, get addresses, otherwise if empty list, render nothing -->
</services:getEmployees>

Это позволяет мне (фронтендеру) отображать сотрудников и их адреса практически на любой странице, освобождая java-разработчика для более важных задач. Службу можно тестировать отдельно от контроллера pageView, контроллер pageView становится намного менее сложным (скажем, например, обрабатывает только аутентификацию и функциональность всего сайта), и жизнь (по крайней мере, для меня) кажется намного веселее.

Мой вопрос

Многочастный на самом деле:

1.) Являются ли мои рассуждения чушью, и если да, то почему и с какой точки зрения? =П

2.) Есть ли лучшие альтернативы? (Я также использовал плитки, например).

3.) Используете ли вы вышеупомянутое решение taglib и каковы ваши впечатления от этого?

4.) Какова стоимость/выгода/риск вышеуказанного решения taglib с точки зрения разработчика Java?

Я понимаю, почему MVC делает его простым для Java-разработчиков, но по моему опыту (на данный момент) он просто переносит трудности на уровень jsp, как будто мне иногда нужно изучать отдельный API для каждой страницы... О, и быть фронтенд-разработчиком , я признаю, что извлечение данных становится более естественным для меня с использованием Ajax и всей этой ерунды, наличие всех данных, доступных при загрузке страницы, является анти-шаблоном в моей области...


person BGerrissen    schedule 04.02.2011    source источник
comment
О, и не стесняйтесь делать все возможное, где бизнес-логика принадлежит = P   -  person BGerrissen    schedule 04.02.2011


Ответы (1)


Вы наверняка слышали мантру о том, что реализовывать бизнес-логику в JSP — это плохо. Но вы понимаете, почему?

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

В системе на основе MVC контроллер проверяет параметры, решает, что нужно сделать, и пытается это сделать. Затем на основе этого он устанавливает код состояния ответа и извлекает данные для отображения в ответе. Наконец, он выбирает представление (например, JSP) и передает управление механизму JSP... который фиксирует ответ HTTP.

Если вы попытаетесь сделать все в JSP, у вас возникнет проблема, связанная с тем, что ответ HTTP, скорее всего, будет зафиксирован слишком рано; то есть до того, как ваша бизнес-логика сделает то, что определит правильный код состояния HTTP.


Ваша неудовлетворенность MVC, по-видимому, в значительной степени связана с вашим предположением о том, что контроллер и представление (JSP) реализованы разными людьми: то есть «разработчиками внешнего интерфейса» и «разработчиками Java», которые имеют непересекающиеся наборы навыков и области ответственности. Я считаю, что у вас должны быть просто «разработчики», обладающие навыками работы по обе стороны «забора». Вообще забора быть не должно.

person Stephen C    schedule 05.02.2011
comment
Ах! Итак, как вы говорите, это не вина MVC, а разработчиков? [sarcasm]@BGerrisan Пусть это будет уроком, чтобы в следующий раз нанимать только разработчиков с MVC-кредитами![/sarcasm] - person Christian; 17.04.2011
comment
@Christian - так ты сам собираешься предложить конструктивный ответ? Или просто саркастическая снайперская стрельба? - person Stephen C; 17.04.2011
comment
О, я думаю, что вы ответили достаточно не использовать MVC (вздох). - person Christian; 17.04.2011
comment
@Christian - я понятия не имею, о чем ты говоришь. - person Stephen C; 17.04.2011