Я разработчик внешнего интерфейса, и я часто нахожусь на уровне представления 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 и всей этой ерунды, наличие всех данных, доступных при загрузке страницы, является анти-шаблоном в моей области...