У меня есть проект, чья основная область резко меняется. Можно использовать 50% основных функций с этого сайта и просто добавить 50% новых функций, но я начинаю считать, что, возможно, быстрее просто переделать продукт в Rails. Скорость разработки очень важна.
В Java есть некоторые вещи, которые мне очень нравятся - производительность и масштабируемость очень хороши. Я не дрянной Java-разработчик, поэтому мои приложения, как правило, работают очень хорошо - лучше, чем сайты Rails, которые я видел. Я всегда принимал идею о том, что люди, вероятно, просто бросают немного больше денег на проблему, когда дело доходит до использования Rails, что, вероятно, само по себе заканчивается из-за безумных преимуществ производительности.
Я на самом деле довольно проворный с Java. Я знаю, что мне все равно понадобится больше времени, чтобы добавить в систему базовую сущность, но я быстро ее понимаю, и я не против этого. По крайней мере, это легко и просто сделать.
Что я имею в виду:
- чтобы запустить/остановить сервер, только чтобы исправить маршрут, ленивое исключение загрузки, контроллер собирается ошибочно, и т.д.
- с учетом того факта, что тесты модуляции/интеграции иногда имеют разные результаты, чем производственная среда (поскольку аннотации на контроллерах не могут быть протестированы или исключения для ленивой загрузки происходят во время асинхронных вызовов службы или подобных вещей). Зная, правильно ли ваш Джексон правильно упорядочивает ваши данные, это еще одна вещь из Tomcat, потому что она обрабатывается Spring. Есть много вещей, которые идут не так, как только вы проверили все, что можете, и это откровенно раздражает меня дерьмом.
- чтобы избавиться от случайной проблемы с maven/classloader, которая не заставляет его уродливую голову, пока вы не развернетесь в tomcat. Это дает ложное впечатление, что все в порядке, когда вы находитесь в своей среде IDE.
- нужно приложить больше усилий для миграции баз данных, чем когда-либо приходилось делать рубинам.
- с ошибками в инфраструктуре Spring, которые блокируются (это произошло примерно 5 раз в этом проекте с 2009 года) или Hibernate. Мне также не нравится обновлять Spring Security и постоянно менять библиотеки конфигурации, apis и tag снова и снова. Это раздражает.
- тратит столько времени на загрузку 58 МБ военных файлов на сервер! Мне требуется 12 минут для загрузки, когда мне нужно развернуть изменения. Если я забыл сделать "mvn clean" перед загрузкой, Spring может жаловаться на то, что 2 beans существуют с тем же именем, потому что я переместил его в новый пакет... а затем мне нужно повторно загрузить всю тупую военный файл снова. Почему "чистый" работает по умолчанию, когда вы делаете "mvn package" для?!?! Иногда эти фреймворки и инструменты используют самые глупые настройки по умолчанию. Это так распространено в мире Java.
- Необходимо потратить час (ы), чтобы выяснить, где фреймворк хочет подключить собственную собственную реализацию для чего-то. Это очень раздражает. Вы можете потратить 2 часа просеивания через Google и дерьмовую документацию, пытаясь выяснить, как переопределить Spring механизм проверки подлинности, например..., а затем потратьте всего 5 минут на запись фактической реализации. Конечно, они писали абзацы на параграфах, объясняющих архитектуру и насколько это потрясающе, но никто не заботится. Что-то настолько распространенное, почему бы просто не привести пример исходного кода и не сделать с ним?
- Ожидание 10-15 секунд для Spring для запуска, когда вы хотите запустить свои интеграционные тесты. Это перетаскивание.
В Java есть несколько вещей, которые мне нравятся. Доступ с помощью ролей очень прост в использовании Spring Безопасность. Аутентификация никогда не бывает такой большой, но мне нравится реализация внутри Spring.
Мне также нравятся Spring объекты для поддержки формы и @ModelAttribute. Это огромные выигрыши, когда дело доходит до контроллеров, и я не знаю, могут ли Rails сделать это. Мне честно никогда не нравилось передавать параметры запроса в каждом действии - Spring MVC на самом деле намного проще использовать, когда дело доходит до этого общего раздувания.
Возможность кэширования действительно массивных структур в памяти и их сохранение в памяти при запуске приложения также очень желательно, особенно для этого приложения. У меня есть тезаурус в памяти и средство проверки грамматики, которое нужно вызвать сотни раз за запрос, поэтому в памяти это самый быстрый вариант для меня.
Еще я думаю, что смогу перестроить то, что у меня есть через 2-3 недели, а затем добавить все новые функции через несколько недель с помощью рельсов.
С яркой стороны все действительно хорошо продуманные css, html и javascript могут быть перенесены с очень маленькими проблемами.
Я буду благодарен за некоторые советы по этому вопросу, прежде чем продолжить.
PS: Я тоже мог бы пойти в Spring -ROO... но это также было бы значительным переделкой. Я никогда не использовал JPA - я использовал Hibernate напрямую. Я также не использую JSP - я использую Freemarker.