Какова ваша “лучшая практика” для первого проекта Java EE Spring?[закрыто]

StackOverflow https://stackoverflow.com/questions/8569

  •  08-06-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

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

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

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

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

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

Помогает в разработке домена

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

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

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

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

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

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

Хорошо работает с графом Beans от Spring IDE

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

Другие советы

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

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

Удачи вам!

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

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

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

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

PS

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

Вообще-то мне очень нравилась весна..Это было свежее дуновение воздуха в обычных Java-бобах J2EE..

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

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

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

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

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

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

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

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

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

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

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

"... Какую технологию вы сразу же использовали:AOP, сложный режим гибернации ... " - Я бы сказал, что лучшим вопросом было бы спросить, что люди не использовали сразу.Я бы добавил примеры, которые вы приводите, к этому списку.

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top