Какова ваша «лучшая практика» для первого проекта Java EE Spring?

В настоящее время я пытаюсь заняться разработкой Java EE с помощью среды Spring. Поскольку я новичок в Spring, трудно представить, как должен начинаться хороший работающий проект.

Есть ли у вас какие-либо передовые практики , советы или основные НЕЛЬЗЯ для начинающего? Как вы начали с Spring - большой проект или небольшие обучающие приложения? Какую технологию вы сразу использовали: АОП, сложный Hibernate ...

Ответов (11)

Решение

Небольшой совет - я счел полезным разбить на модули и четко обозначить мои XML-файлы контекста Spring на основе проблем приложения. Вот пример веб-приложения, над которым я работал:

  • MyProject / src / main / resources / spring /
    • datasource.xml - мой компонент с единственным источником данных.
    • persistence.xml - Мои DAO / репозитории. Зависит отdatasource.xmlфасоли.
    • services.xml - реализации уровня обслуживания. Обычно это bean-компоненты, к которым я применяю транзакционность с помощью АОП. Зависит отpersistence.xmlфасоли.
    • controllers.xml - Мои контроллеры Spring MVC. Зависит отservices.xmlфасоли.
    • views.xml - Мои реализации представления.

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

По моему (ограниченному) опыту я видел, что этот подход дает следующие преимущества:

Более четкая архитектура

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

Помогает в дизайне домена

Если вы хотите добавить определение bean-компонента, но оно не подходит ни для одного из ваших контекстных файлов, возможно, возникла новая концепция или возникла проблема? Примеры:

  • Предположим, вы хотите сделать уровень обслуживания транзакционным с помощью АОП. Вы добавляете эти определения bean-компонентов services.xmlили кладете их в свои собственные transactionPolicy.xml? Обсуди это со своей командой. Должна ли ваша политика транзакций быть подключаемой?
  • Добавить компоненты Acegi / Spring Security в controllers.xmlфайл или создать security.xmlфайл контекста? У вас разные требования к безопасности для разных развертываний / сред?

Интеграционное тестирование

Вы можете подключить подмножество своего приложения для тестирования интеграции (например, с учетом вышеуказанных файлов для тестирования базы данных, которую вам нужно создать, datasource.xml и persistence.xml bean-компонентов).

В частности, вы можете аннотировать класс интеграционного теста как таковой:

@ContextConfiguration(locations = { "/spring/datasource.xml" , "/spring/persistence.xml" })

Хорошо работает с Beans Graph в Spring IDE.

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

Сосредоточьтесь в первую очередь на самом сердце Spring: внедрении зависимостей. Как только вы увидите все способы использования DI, начните думать о более интересных вещах, таких как AOP, Remoting, JDBC Templates и т. Д. Итак, мой лучший совет - позвольте вашему использованию Spring вырасти из ядра.

Лучшая практика? Если вы используете стандартную конфигурацию XML, управляйте размером отдельных файлов и разумно комментируйте их. Вы можете подумать, что вы и другие прекрасно поймете определения ваших bean-компонентов, но на практике к ним труднее вернуться, чем к обычному старому java-коду.

Удачи!

Хотя прошло много лет с тех пор, как я использовал Spring, и я не могу сказать, что я его поклонник, я знаю, что инструмент App Fuse ( https://java.net/projects/appfuse/ ) помог людям bootstrap с точки зрения создания всех артефактов, необходимых для работы.

На самом деле, мне очень понравилась Spring .. Это был свежий ветерок в ваших обычных J2EE Java Beans ..

Я рекомендую реализовать пример Spring:

http://static.springframework.org/docs/Spring-MVC-step-by-step/

Кроме того, я решил перейти на полную версию и добавил Hibernate в свое приложение Spring;), потому что Spring обеспечивает отличную поддержку Hibernate ... :)

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

Spring также очень много занимается модульным тестированием и, следовательно, тестируемостью ваших классов. Это в основном означает размышление о модульности, разделении задач, обращении к классу через интерфейсы и т. Д.

Хороший способ начать - сосредоточиться на «Springframework». Портфолио Spring выросло до большого количества проектов, посвященных различным аспектам корпоративного программного обеспечения. С самого начала придерживайтесь сути и попытайтесь понять концепции. Загрузите последние двоичные файлы и ознакомьтесь с примером Spring petclinic, когда вы познакомитесь с ядром. Он дает неплохой обзор различных проектов, которые может предложить SpringSource.

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

Если вы просто хотите немного поработать с этим и посмотреть, нравится ли вам это, я рекомендую начать со слоя DAO, используя поддержку Spring JDBC и / или Hibernate. Это познакомит вас со многими основными концепциями, но сделайте это так, чтобы их было легко изолировать от остальной части вашего приложения. Я пошел по этому пути, и это была хорошая разминка перед тем, как приступить к созданию полного приложения с помощью Spring.

Начните здесь - я на самом деле считаю, что это одна из лучших книг по разработке программного обеспечения, которые я читал.
Эксперт Spring MVC и Web Flow

Изучите новую конфигурацию на основе аннотаций для классов MVC. Это часть Spring 2.5. Использование классов на основе аннотаций значительно упростит написание модульных тестов. Также хорошо иметь возможность сократить объем XML.

Ах да, модульные тесты - если вы используете Spring, вы ЛУЧШЕ станете модульным тестером. :) Напишите модульные тесты для всех ваших классов Web и Service Layer.

Прочтите о доменно-ориентированном дизайне. Тот факт, что вы можете использовать классы объектов домена на всех уровнях приложения Spring, означает, что у вас будет ОЧЕНЬ мощная модель домена. Используйте это.

Однако при использовании классов объектов предметной области для заполнения форм вы захотите принять во внимание недавние проблемы безопасности, связанные с Spring Framework. Обсуждение на стороне сервера показывает способ закрыть дыру в комментариях.

«... Какую технологию вы использовали сразу: АОП, сложный Hibernate ...» - я бы сказал, что лучше спросить, что люди не использовали сразу. Я бы добавил в этот список примеры, которые вы цитируете.

Шаблоны Spring MVC и JDBC были бы моими стартовыми рекомендациями. С ними можно пройти очень долгий путь.

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

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

IDE с лучшей поддержкой Spring - это IntelliJ. Стоит потратить несколько баксов.

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

Если вы в целом следуете лучшим практикам, например:

  • Определение интерфейса, а не абстрактных классов
  • Делаем типы неизменяемыми
  • Сохраняйте как можно меньше зависимостей для одного класса.
  • Каждый класс должен делать что-то одно и делать это хорошо. Большие монолитные классы - отстой, их сложно тестировать и сложно использовать.

Если ваши компоненты маленькие и соответствуют вышеприведенным догмам, их будет легко подключить и поиграть с другими вещами. Вышеупомянутые моменты, естественно, справедливы и для самой среды Spring.

PS

Не слушайте вышеперечисленные пункты, они говорят о том, что делать. Важнее научиться думать, чем что-то делать. Люди могут думать, повторять что-то - не умно, а думать - умно.

С выпуском Spring 2.5 и 3.0 я думаю, что одним из наиболее важных передовых методов, которыми можно воспользоваться сейчас, являются аннотации Spring. Аннотации для контроллеров, служб и репозиториев могут сэкономить массу времени, позволяют сосредоточиться на бизнес-логике вашего приложения и потенциально могут сделать все ваши объекты простыми старыми объектами Java (POJO).