Какова ваша “лучшая практика” для первого проекта Java EE Spring?[закрыто]
Вопрос
В настоящее время я пытаюсь приступить к разработке 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).