Рекомендация веб-фреймворка Java

Я разрабатываю серверные продукты, используя веб-сайты в качестве интерфейсов. Лежащая в основе логика обычно сложна, однако пользовательские интерфейсы ОЧЕНЬ просты (большинство из них представляют собой простые CRUD-операции с таблицами mysql. Самый сложный запрос обычно требует нескольких объединений, и все обычно выполняется без сохранения состояния, за исключением пользователя). реквизиты для входа).

До сих пор я проектировал свои проекты таким образом:

  • PHP / HTML5 / JScript — простой веб-сайт для доступа к данным/настройки параметров. Он не имеет прямого доступа к модели. Он должен запрашивать API (чтобы свести к минимуму влияние изменений). Обычно я позволяю пользователю извлекать и обрабатывать данные из API с помощью JavaScript.
  • PHP Api/MySQL — PHP REST Api, подключенный к модели mysql с использованием моего пользовательского класса доступа к БД (сделал его для моего первого проекта, и после нескольких обновлений он обычно покрывает большинство запросов проекта). API передает данные в наши собственные элементы управления формой JavaScript и в пользовательские графические интерфейсы пользователя. Я предпочитаю обеспечивать непротиворечивость модели в базе данных, нормализуя ее и используя простые триггеры для поддержания согласованности, избегая некоторых опасных правок в сложных базах данных, поэтому самая сложная вещь, которую делает модель PHP, — это сложные поисковые запросы или транзакции. Некоторые поиски требуют динамического создания запросов для некоторых вспомогательных объединений, однако это не является обычным сценарием.
  • Исполняемый файл(ы) со сложной логикой, обычно на C++, иногда на Python или Java, если время в спешке или есть действительно хорошие доступные библиотеки, а производительность не является ключевым вопросом. Он работает в фоновом режиме как служба или вызывается PHP, в зависимости от потребностей проекта. В основном это Python, Java или C++. Фоновые процессы обычно пишут напрямую в БД, а исполняемые файлы выдают результат через stdout/err.

Как я уже говорил, обычно наши веб-сайты ДЕЙСТВИТЕЛЬНО просты, поэтому для простоты я создал базовый API и базовый веб-сайт поверх Code Igniter; как я уже сказал, эта часть приложения очень проста и покрывается моими собственными общими классами.

Проблема

У меня две основные проблемы:

  • Я единственный PHP-разработчик, оставшийся в компании, так что мой босс плохо относится к ремонтопригодности проекта. Ему нравится Java, а я знаю Java, поэтому он предпочитает использовать Tomcat.
  • У меня нет профессионального опыта работы с Java-фреймворками, и я не люблю кодировать одни и те же вещи снова и снова для каждого проекта, а также не заполнять их шаблонным копированием/вставкой, поэтому, если мне нужен какой-то структурированный, красивый фрагмент кода, чужой могу понять, что фреймворки - это путь, так как у меня недостаточно опыта работы с Tomcat, чтобы сделать это с нуля.

Вопрос

Следующий проект, с которым мне предстоит столкнуться, будет намного проще реализовать с помощью сервера с учетом состояния, такого как Tomcat. Я также хотел бы иметь возможность объявлять классы в области приложения (или что-то подобное, что делает их экземпляры только один раз при запуске Tomcat, если инфраструктура не поощряет эту практику).

Какие фреймворки Java наиболее подходят для моей проблемы и общей ситуации? Мой план состоит в том, чтобы сделать seed-проект, чтобы сделать мои проекты однородными, однако, может быть, лучше использовать инструменты генерации, каков ваш опыт в этом? .У меня есть время поэкспериментировать с фреймворком, прежде чем приступить к самому проекту.

Прямо сейчас мои коллеги, которые программируют Tomcat, в настоящее время используют смесь следующего:

  • Struts2
  • Mybatis для абстракции БД. Он кажется слишком большим. Похоже, я буду использовать только 5% его мощности для своих проектов.
  • Плитки для визуализации гомогенизации

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

Как я уже сказал, наши конечные точки очень просты, поэтому я бы предпочел легкую структуру. Я знаю, что лучший фреймворк — это тот, с которым вам удобнее всего, и что, если мои коллеги знают конкретный фреймворк, гораздо лучше просто подыграть, но, как я уже сказал, у меня нет опыта работы с java-фреймворками, поэтому я Мне все равно предстоит его изучить, поэтому мне нужны мнения, основанные на опыте.

ПОБОЧНЫЙ вопрос: как я уже говорил, большинство моих проектов имеют конечную точку REST Api. PHP выглядит идеально для этого, так как не требует принудительного ввода типов, однако с произвольными структурами данных Java не так прост, как PHP. Я помню со времен Java, что использовал библиотеку Google Gson для обработки кодирования/декодирования JSON, и, кажется, она все еще в моде прямо сейчас. Раньше он удовлетворял мои потребности. Есть мысли по этому поводу?

побочный вопрос 2: Представьте себе следующий сценарий: у меня есть анализатор Tika для извлечения простого текста из документов. Моя первая мысль — создать экземпляр синтаксического анализатора Tika в области приложения, а затем при необходимости вызывать его методы. В C мне нужно было бы обрабатывать параллелизм самостоятельно, правильно ли это делает Tomcat? каковы наилучшие практики с tomcat? Сегодня вечером я буду интенсивно читать документацию по Tomcat, так что, вероятно, я смогу ответить себе на этот вопрос достаточно скоро.

Ответы (1)

У вас довольно много требований, и я никогда не слышал о некоторых фреймворках, которые вы упомянули. (Например, я никогда не писал ни строчки на PHP.) Тем не менее, я бы порекомендовал вам (мета)фреймворк Spring.

Pivotal (предприятие, стоящее за Spring) описывает Spring следующим образом:

Ключевым элементом Spring является инфраструктурная поддержка на уровне приложений: Spring фокусируется на «подключении» корпоративных приложений, чтобы команды могли сосредоточиться на бизнес-логике на уровне приложений без ненужных привязок к конкретным средам развертывания.

Кроме того, есть Spring Boot , который дает вам возможность запустить свой проект. Учебник по созданию простого REST-сервера можно найти здесь .

Если вы ищете простой, легкий в освоении фреймворк, Spring не для вас. Но на мой взгляд, это больше, чем фреймворк, потому что он предоставляет целую экосистему фреймворков, которые можно комбинировать в соответствии с вашими потребностями.

Например, есть Spring Data и Spring Data REST , которые автоматически (более или менее) создают REST API и необходимые операции CRUD.

К сожалению, у меня нет опыта разработки интерфейсов и Spring, но есть Spring MVC , который поддерживает создание интерфейсов.

Spring также можно упаковать как WAR и развернуть на сервере Tomcat.

Спасибо вам за ваши предложения. Собственно, я начал экспериментировать со Struts2. У меня есть Spring в моем списке наблюдения, однако он кажется мне немного тяжеловатым. Я планирую узнать об этом, но я думаю, что не буду вникать в это, пока не окажусь в ситуации, когда Struts2 слишком неудобен для реализации: наше взаимодействие с пользователем действительно простое, поэтому, вероятно, Struts будет достаточно для большинства моих проектов. Это также позволяет мне создавать экземпляры классов в области приложения, поэтому я доволен этим банкоматом.