Как я могу ускорить внутреннюю разработку Java? Или я могу? - PullRequest
1 голос
/ 04 ноября 2008

Я начал веб-программирование с необработанного PHP, постепенно переходя к его различным фреймворкам, а затем к Django и Rails. В каждом фреймворке, который я использовал, почти все, что мне нужно делать с базой данных (даже с относительно сложными вещами, такими как отношения «многие ко многим»), может быть выполнено автоматически сгенерированным API базы данных без особой работы. Те немногие операции, которые были более сложными, можно выполнить с помощью прямого SQL или связав несколько вызовов API.

Теперь я начинаю изучать Java, и меня смущает, что язык, прославляемый за свою надежность для серверной инфраструктуры, требует гораздо больше кода (не значит ли это сложнее поддерживать?) Для выполнения простых вещей. Пример из учебника: скажем, вы хотите искать по фамилии. Вы пишете метод в DAO, используя язык запросов Hibernate, затем вы пишете метод в Сервисе для его вызова (не может ли это быть автоматизировано?), Затем вы вызываете метод Сервиса из контроллера. В то время как в любой другой среде, с которой я работал, вы могли бы назвать что-то с эффектом

Person.find_by_last_name(request.POST['last_name'])

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

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

Ответы [ 8 ]

4 голосов
/ 04 ноября 2008

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

Controller -> Service -> DAO

Это обеспечивает разделение внутри приложения. Это также полностью зависит от архитектуры вашего приложения, а не от Java как языка. Технически в Java нет ничего, что могло бы помешать вам вызвать запрос Hibernate на вашем контроллере. Это просто не будет хорошим дизайном.

Еще одна вещь, которую следует учитывать, это то, что «Service» может быть чем-то вроде EJB, который может выполнять роль управления транзакциями, так что несколько вызовов DAO / Hibernate могут быть объединены в одну транзакцию, которая будет автоматически фиксироваться или откат в случае успеха / исключения.

Опять же, это все в используемой вами архитектуре / фреймворке, а не в качестве языка Java.

4 голосов
/ 04 ноября 2008

Граальс за победу. Groovy очень похож на Java, но с множеством приятных динамических языковых дополнений / упрощений. У Grails есть GORM, это именно то, что вы ищете.

1 голос
/ 04 ноября 2008

Я бы посоветовал вам использовать Seam. Это очень хороший контроллер, который не заставляет вас иметь полностью многоуровневый ап. Он полностью интегрирован с JPA (Java Persistence Api), который выполняет ORM.

Особенности

  1. Имеет очень хорошую область видимости - у вас могут быть объекты, заданные для Сеанса, загрузки страницы, разговора (разговор - это единица работы с точки зрения пользователя).
  2. Не требует большого количества XML.
  3. Не требует большого количества стандартного кода!
  4. Прост в освоении (вы даже можете сгенерировать каркасный проект из классов сущностей или схемы БД; он все равно потребует большой работы, но по крайней мере сократит шаблонный код)
  5. Очень хорошая защита (вы можете использовать защиту на основе ролей или структуру правил)

При написании веб-страницы вы используете бины (обычные объекты Java).

Вы можете написать:

 #{PersonHome.instance.name} 

, который будет оцениваться по значению имени человека. Если в параметре запроса был идентификатор лица, он будет передан компоненту PersonHome (если он был правильно аннотирован), и компонент bean будет прозрачно загружен из БД.

И вы даже можете написать:

<h:commandLink action="#{PersonHome.delete(person}">

Где controllerBean - это Java-бин, а delete - объект person. Он будет прозрачно преобразован в ссылку, которая будет иметь параметр person id, который будет прозрачно переведен в bean-компонент до запуска метода действия.

Единственное предостережение на данный момент в том, что он несколько ограничивает ваш выбор каркаса представления: он работает только с RichFaces, GWT и чем-то еще, что я не могу вспомнить сейчас;).

PS.

Да, я большой поклонник шва :).

1 голос
/ 04 ноября 2008

Я бы посоветовал вам взглянуть на Spring framework для Java.

Я лично не использовал это, но я слышал хорошие вещи об этом. Из того, что я понимаю, он обеспечивает ту же функциональность, что и Django и Rails.

0 голосов
/ 09 декабря 2008

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

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

Дело не в том, что Java является более зрелой, чем, скажем, в Ruby, просто в том, что Java использовалась дольше и была доказана ИТ-отделами, не склонными к риску.

Таким образом, одним из рекомендуемых способов является использование JRuby (+ Rails), поскольку он работает на виртуальной машине Java, и ИТ-отделу не нужно ничего устанавливать или переконфигурировать ...

0 голосов
/ 04 ноября 2008

Частично причина того, что вы не получаете автоматически сгенерированные API-интерфейсы баз данных в Java, заключается в том, что как скомпилированный язык без макросов (например, Lisp) он не может выполнять генерацию кода во время выполнения. Динамически типизированные языки сценариев, такие как Ruby, имеют такую ​​возможность.

Другая часть причины - культурная: в последнее десятилетие мир J2EE предпочитал конфигурацию, а не конвенцию. Основная причина такого предпочтения заключается в том, что корпоративные приложения часто вынуждены работать с множеством хитрых предположений, которые влекут за собой всевозможные «странные» крайние случаи. Что есть, то есть. Эти предположения резко контрастируют с тем, что предполагают более новые фреймворки, такие как Rails.

Тем не менее, я не думаю, что есть что-то, что мешает Java ORM API генерировать API баз данных во время компиляции. Я предполагаю, что Обнаженные объекты больше в вашем переулке.

0 голосов
/ 04 ноября 2008

Ну да, но это не разлука, это забота для меня. С этими другими API баз данных проблемы разделяются - дело не в том, что пользовательская логика БД записана в контроллере (что я знаю, это плохая форма), а в том, что она генерируется автоматически. Вызов выглядит точно так же с контроллера, разница в том, что с Java / Hibernate мне пришлось написать его самому, а с Django / Rails / Symfony / Cake он уже был у меня.

Грааль выглядит очень интересно. Однако основная причина, по которой я изучаю Java, заключается в том, что я хочу, по крайней мере, иметь возможность работать с чем-то, что я могу использовать профессионально. Я не уверен, что Grails подходит под этот счет, хотя, поскольку это Java, возможно, Enterprise подойдет к этому больше, чем Rails.

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

iBATIS выглядит очень многообещающе - просматривая код JPetStore, он выглядит немного более автоматически. Но нужно ли все это SQL кодировать вручную? Потому что тогда я вернусь туда, откуда начал.

Spring имеет отличный и достаточно простой в работе интерфейсный уровень (MVC), и он довольно красиво связывает компоненты. Хотя его можно использовать для интеграции ORM в приложение, насколько я знаю, это не одно.

0 голосов
/ 04 ноября 2008

Получить iBatis для Java. Он не такой надежный, как ORM в Django (ничего нет), но это большой, большой шаг над JDBC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...