Стоит ли меняться с java/spring/hibernate на rails для программы, которая претерпевает значительные изменения?

У меня есть проект, чья основная область резко меняется. Можно использовать 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.

Ответ 1

Для Ruby и Rails требуется больше времени. Я работал независимым подрядчиком как Spring и экспертом Hibernate, но я чувствовал себя задушенным java и его веб-фреймворками, поэтому решил изучить Ruby on Rails.

Я бы посоветовал вам изучить Ruby, из того, что я читал, вы, вероятно, овладеете им, хотя и очень расстроены тем, как использовать ORM. У меня были проблемы с ним, которые использовались для работы с совокупными корнями в Hibernate для ActiveRecord для одного класса. Но, эй, вы могли бы легко попробовать MongoDB, чтобы иметь какое-то настоящее удовольствие.

Ruby

  • меньше кода
  • он быстрый и масштабируемый (медленнее, чем java для конкретных задач, но вы избавляетесь от стеков слоев.)
  • проблемы чаще; какой драгоценный камень я должен использовать. Воздушность!
  • уникальное, большое, совместное и заботливое сообщество с открытым исходным кодом.
  • хорошие рамки, такие как Rails и Sinatra
  • мощный.
  • весело!

Я бы посоветовал вам выполнить проект, который вы описываете в Ruby.

НЕТ.

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

Лучшим вариантом было бы нанять старшего разработчика рубинов, чтобы объединиться с вами и научить вас. Будьте хорошим учеником, и вы научитесь быстро. Быстрее, чем я, мне приходилось самому учиться самому, что действительно неэффективно.

Удачи!

Ответ 2

Отъезд Playframework. Его интерес к разработке, и вы можете использовать свой опыт Java, чтобы быстрее развивать функции (учитывая, чем у вас есть 2 недели), чем любые другие основанные на Java фреймворки.

Вам не нужно запускать/останавливать сервер. Вы исправляете код в Eclipse и обновляете обновление в браузере. Нет работы с файлами WAR, пока вы не начнете фактически развертывать их на производстве. Делайте все изнутри Eclipse. Легко выполнять TDD-процесс, если это то, что вы хотите по мере разработки кода. С точки зрения архитектуры, это полностью независимая структура RESTful от get-go. Полностью совместим с JPA (даже для NoSQL, как Mongo), поэтому вам не придется писать сложный код JDBC. На интерфейсе он имеет полнофункциональный шаблонный движок, используя Groovy в качестве языка шаблонов.

Я могу продолжать и продолжать, но я бы рекомендовал пройти через сайт и посмотреть.

Ответ 3

Вы должны взглянуть на Grails.

Вы можете продолжать использовать много своего Java-кода, но использовать язык сценариев (Groovy) и многие парадигмы Rails. Например. много времени, сэкономленное, используя соглашение, а не конфигурацию.

Grails используется некоторыми довольно крупными веб-сайтами, например. BSkyB - спутниковая телекомпания Великобритании.

Это не помогает с некоторыми аспектами скорости запуска. Если вы действительно цените скорость разработки, вы можете получить более быструю машину или купить SSD и поместиться в своей машине. Если вы работаете в крупной компании - продайте ее своему менеджеру как более дешевый вариант (например, купите машину за 2000 долларов, а не потратите 3 недели на переписывание чего-то, чтобы сэкономить 10 минут в день).

Java будет лучше масштабироваться в долгосрочной перспективе, чем Rails. Технология Hotspot в JVM - одно из чудес современных технологий.

Ответ 4

Также стоит проверить Tapestry5. Это позволяет вам изменять код на лету (не требуется перезагрузка сервера), и это самая быстрая и быстрая среда разработки в Java, которую я использовал.

Ответ 5

Я бы все равно дал Spring Roo выстрел, он будет тем же самым, что и с Ruby on Rails или Grails или даже меньше, но вы все равно останетесь с чем-то, что вам знакомо, что часто является самым большим соображением

В нем есть концепции лесов Ruby on Rails и Grails, но он дает вам нулевую блокировку кода, просто простую, хорошо написанную (массивное использование АОП - это вопрос вкуса) Spring + Hibernate/JPA (I подумайте, что вы можете использовать Freemarker для просмотров, у Roo есть мириада плагинов, но я не уверен на 100%)