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

У меня есть проект, основной домен которого резко меняется.Можно использовать 50% основных функций с этого сайта и просто добавить 50% новых функций, но я начинаю считать, что, возможно, быстрее будет просто переделать продукт в Rails.Скорость разработки очень важна.

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

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

Что я имею в виду:

  • необходимость запустить / остановить сервер только для исправления маршрута, исключение отложенной загрузки, контроллернеправильное представление и т. д.
  • смирившись с тем фактом, что модульные / интеграционные тесты иногда дают результаты, отличные от производственной среды (поскольку аннотации на контроллерах не могут быть протестированы, или во время исключений при отложенной загрузке возникаютасинхронные вызовы службы или тому подобное).Знание того, правильно ли ваш Джексон выполняет маршалинг ваших данных, - это еще одна вещь, только для Tomcat, потому что она обрабатывается Spring.Есть много вещей, которые идут не так после того, как вы проверили все, что можете, и это откровенно раздражает меня до чертиков.
  • мириться со случайной проблемой maven / classloader, которая не поднимает его уродливую головупока вы не развернетесь в Tomcat.Это создает ложное впечатление, что все в порядке, когда вы находитесь в IDE.
  • необходимо приложить больше усилий для миграции баз данных, чем когда-либо рубиновые люди.
  • с ошибками в фреймворке в Spring в этом блоке (это случалось примерно 5 раз в этом проекте с 2009 года) или в Hibernate.Мне также не нравится обновлять Spring Security и заставлять их постоянно менять конфигурацию, apis и библиотеки тегов снова и снова.Это раздражает.
  • тратит столько времени на загрузку 58 МБ военных файлов на сервер!На загрузку у меня уходит 12 минут, когда мне нужно развернуть изменения.Если я забыл сделать «mvn clean» перед загрузкой, Spring может жаловаться, что существует 2 бина с одним и тем же именем, потому что я переместил один в новый пакет ... и затем мне придется заново загрузить весь тупой файл войны снова.Почему «чистый» запуск по умолчанию не выполняется, когда вы делаете «mvn package» для?!?!Иногда эти платформы и инструменты используют самые глупые настройки по умолчанию.Это так часто встречается в мире Java.
  • Необходимо потратить час (а), чтобы выяснить, где фреймворк хочет подключить вашу собственную пользовательскую реализацию для чего-то.Это очень раздражает.Вы можете потратить 2 часа, просматривая Google и дрянную документацию, пытаясь выяснить, как переопределить механизм аутентификации Spring Security, например ... и затем потратить только 5 минут на написание фактической реализации.Конечно, они написали параграфы за параграфами, объясняющие архитектуру и то, как это круто, но никому нет до этого дела.Для чего-то такого распространенного, почему бы просто не привести пример исходного кода и покончить с этим?
  • Ожидание 10-15 секунд для запуска Spring, когда вы захотите запустить интеграционные тесты.Это перетаскивание.

Есть несколько вещей, которые мне нравятся в Java.Доступ на основе ролей очень прост в Spring Security.Аутентификация никогда не бывает такой большой выгодой, но мне нравится реализация внутри Spring.

Мне также нравятся объекты поддержки формы Spring и @ModelAttribute.Это огромные победы, когда дело доходит до контроллеров, и я не знаю, может ли Rails сделать это.Мне, честно говоря, никогда не нравилось передавать параметры запроса в каждом действии - на самом деле Spring MVC намного проще в использовании, когда дело доходит до этого обычного раздувания.

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

Даже, тем не менее, я думаю, что могу восстановить то, что имеючерез 2-3 недели, а затем добавьте все новые функции через несколько недель с помощью рельсов.

С другой стороны, все действительно хорошо разработанные CSS, HTML и JavaScript могут быть перенесены с оченьнебольшие проблемы.

Я хотел бы получить несколько советов по этому вопросу, прежде чем я продолжу.

PS: Я мог бы также пойти в Spring-ROO ... но это также было бы значительной переделкой.Я никогда не использовал JPA - я использовал Hibernate напрямую.Я также не использую JSP - я использую Freemarker.

Ответы [ 5 ]

10 голосов
/ 25 апреля 2011

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

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

Ruby - это

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

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

NO.

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

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

Удачи!

5 голосов
/ 25 апреля 2011

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

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

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

3 голосов
/ 27 апреля 2011

Тебе стоит взглянуть на Грааля.

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

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

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

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

2 голосов
/ 20 августа 2012

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

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

2 голосов
/ 25 апреля 2011

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

...