Выбор фреймворка/библиотек для проекта

 
 
 
Сообщения:5
Доброго времени суток!

Прошу помощи в выборе правильных инструментов для написания проекта.
Java начал изучать совсем недавно. Пока что все понятно и интересно. В программировании не новичок, до этого изучал php (продолжительное время), но в какой-то момент пришел к выводу, что возможностей этого языка не хватает для реализации моих идей. В общем это было небольшое отступление, чтобы не пытались отговаривать изучать java ))))

Хочу реализовать очередную идею. На php привык пользоваться фреймворками, реально облегчают и ускоряют работу. По java, пока что прочитал только Шилдта, теперь хочу двигаться дальше в изучении, уже непосредственно по теме своего проекта. Поэтому прошу помощи в выборе необходимых инструментов будь-то фреймворки/библиотеки, а может и что-то другое ))))

Проект будет состоять из серверной части, веб-клиента и андроид-клиента (пока, что в перспективе). С веб-клиентом уже в принципе определился на чем и при помощи чего его писать (но также выслушаю и Ваши предложения, возможно с помощью java уже можно реализовывать веб-клиенты, по типу SPA Ajax Javascript). Общение между сервером и клиентом будет традиционно проходить как request-response, т.е. restfull api. Сначала естественно хочу написать серверную часть.

Задачи которые должен выполнять сервер:
1. Http request-response (get/post/put/delete и т.п.) json
2. Oauth авторизация/аутентификация
3. Роли пользователей и регистрация пользователей
4. Работа с базой данных (безопасность+фильтрация+query-builder или что-то вроде этого)
5. Валидация входящих данных от клиента
6. Работа с файлами (загрузка на сервер/хранение/выдача файла клиенту)
7. Фоновые задачи по расписанию (планировщик заданий)
8. Логи
9. Возможность реализации чата
10. Работа с email
 
 
Сообщения:456
Используй Spring Люк. :))
Это фреймворк в котором есть компоненты на все случаи (ну по крайней мере для ваших задач есть точно).
Ну и Hibernate, для работы с БД, хотя в spring и для этого есть свой ORM.
 
 
Сообщения:5
izon:
Используй Spring Люк. :))


Погуглил немного по java-фреймам, смотрю везде про spring говорят. Я так понял spring в java - это как laravel в php ))))

Спасибо за совет, почитаю документацию по нему.
 
 
Сообщения:690
Не связывается с этим говном, я имею в виду Spring
 
 
Сообщения:5
gidravlic:
Не связывается с этим говном, я имею в виду Spring

Обоснуйте, поясните? Что Вы предлагаете?
 
 
Сообщения:258
razorg1991:
Я так понял spring в java - это как laravel в php ))))

В те, далёкие времена, когда я еще пилил на php, то как spring для java, для php был Zend Framework. А сейчас, значит, lavarel?..

"Любая техническая система должна быть идиотоустойчивой" (с) один из университетских преподов
 
 
Сообщения:5
Mihnayan:
А сейчас, значит, lavarel?

Да, весь запад уже года 2 пилит на ларавеле и наши тоже не отстают. Зенд как бы еще есть, но им как бы уже почти никто не пользуется ))) Просто абстрактные абстракции уже всех в край задолбали ))) А Лара сделал громадный скачек за 2 последних года.

Теперь что касается java, Вы бы какой инструмент посоветовали?
 
 
Сообщения:9474
razorg1991:
1. Http request-response (get/post/put/delete и т.п.) json
Есть две возможности:
- Использовать JAX-RS (Java стандарт) и соответственно его реализации (Apache CXF, Jersey).
- Spring MVC - не реализует стандарт, однако имеет хорошую интеграцию с остальными спринговыми библиотеками
razorg1991:
2. Oauth авторизация/аутентификация
3. Роли пользователей и регистрация пользователей
Spring Security - есть как поддержка OAuth2, так и понятие ролей, аутентификации, remember me.
razorg1991:
4. Работа с базой данных (безопасность+фильтрация+query-builder или что-то вроде этого)
Безопасность - в смысле пре-подготовленные SQL запросы? В Java это называется PreparedStatement - это, правда, низкоуровневая работа с БД. Для более высокоуровневого самые популярные выборы:
- Spring JDBC - нужно писать SQL запросы а также логику по трансформации из результатов в Java объекты. Наверняка в PHP так работают, а раз это знакомый подход, то лучше начинать с него.
- Hibernate ORM - еще более высокоуровневая штука. Мапишь классы на таблицы и колонки, а он уже генерирует SQL запросы и управляет жизненным циклом.
razorg1991:
5. Валидация входящих данных от клиента
В Java есть стандарт Bean Validation. Самая популярная его реализация - Hibernate Validator.
razorg1991:
6. Работа с файлами (загрузка на сервер/хранение/выдача файла клиенту)
Тут особо ничего не нужно - обычные Java Core средства, ну и тот же Spring MVC для работы с HTTP клиентами. Если же речь про хранение на отдельных серверах плюс всякие nginx/apache, то тут уже не специфично для Java.
razorg1991:
7. Фоновые задачи по расписанию (планировщик заданий)
Quartz. У спринга есть интеграция с ним чтоб чуточку упростить себе жизнь. Но в общем и без него Quartz достаточно простая библиотека.
razorg1991:
8. Логи
Logback. Пару лет назад появился еще Log4J2, однако пока это неисследованное поле и работает, возможно, очень не стандартно судя по описанию подхода. Лучше начинать с Logback'a.
razorg1991:
9. Возможность реализации чата
Ну тут скорей архитектурный вопрос который не специфичен для Java.
razorg1991:
10. Работа с email
Обычный JavaMail который входит в JavaCore. Если нужна возможность создавать шаблоны и просто туда данные подставлять - Velocity.

Я бы советовал именно со спрингового стека начинать т.к. он самый распространенный и самый модный. А после первых пары-тройки приложений можно будет уже смотреть по сторонам. Можно конечно еще посмотреть не на обычный спринг, а на Spring Boot - с ним очень быстро можно начать, но это прямой путь к тому чтоб ничего не понимать в том как работает приложение и как его можно подтюнить.

Еще из неосветленных тем:
- Tomcat - application server на котором все будет крутиться, стандартный выбор для Spring'овых приложений. Может стоять за nginx'ом.
- Servlets - стандарт на котором построены как JAX-RS реализации, так и Spring MVC. Лучше бы хотя бы немного изучить прежде чем за них браться.
- Spring Tx - для декларативного описания транзакция. Чтоб не писать "транзакция начнись, транзакция закончись", а просто помечать методы как транзакционные и все остальное будет сделано само под капотом. Это правда немного магии которая называется AOP (Spring AOP, AspectJ).
- Maven - самый распространенный и самый правильный инструмент для сборки. Как по мне так вообще среди всего программерского мира, я лучшего инструмента еще не видел. Хотя есть люди которых смущает количество XML, но это не большой недостаток как по мне.
- Jackson - трансформация Java объектов в JSON/XML и обратно.
- H2 - in-memory БД с помощью которой можно тестировать SQL запросы не устанавливая полноценный БД сервер. Не подойдет если твои SQL запросы будут очень уж СУБД-специфичны.
- C3P0 - пул БД соединений, тут пример настройки.
- Jenkins - билд сервер на котором можно настраивать сборки, запуск тестов, деплойменты.
- JUnit или TestNG для написания всех Java тестов. Они очень похожи, поэтому правда не важно что выбирать. JUnit был первым и за сим более распространен. TestNG был вторым и поэтому более гибок и функционален.
- RestAssured - если нужно писать REST тесты
- MockMVC - если хочется писать REST тесты не запуская реальный апп сервер. Работает только со Spring MVC.
Изменен:20 ноя 2016 13:19
 
 
Сообщения:5
Староверъ, большое спасибо за подробнейший ответ )))

Наверное все-таки начну изучать spring. Уже нашел книгу Шефер "Spring 4 для профессионалов". Прочитал первую главу о возможностях фрейма и о чем, конкретно будет описано в этой книге - практически все нужды, которые я описал в начале темы ))))) Очень порадовало ))) Буду читать дальше.
 
 
Сообщения:456
gidravlic:
Не связывается с этим говном, я имею в виду Spring

Критикуя, предлагай.
Если конкретно вам не нравится Spring, укажите на недостатки и предложите альтернативу.
 
 
Сообщения:690
izon:
gidravlic:
Не связывается с этим говном, я имею в виду Spring

Критикуя, предлагай.
Если конкретно вам не нравится Spring, укажите на недостатки и предложите альтернативу.


А чем чистый и пурэ java не нравиться? Всего достаточно. Зачем извращения и тонна jar'ников и xml'ного избытка?
 
 
Сообщения:456
gidravlic:
А чем чистый и пурэ java не нравиться? Всего достаточно. Зачем извращения и тонна jar'ников и xml'ного избытка?

Ну хотя бы тем, что придется написать много "лишнего" кода, не имеющего прямого отношения к логике приложения, а чтобы избежать copy-paste придется все равно написать какие то свои библиотеки и утилитные классы (т.е. написать свой фреймворк). Вопрос зачем все это делать если есть готовое и проверенное. Да, я вполне допускаю что есть задачи где применение фреймворков это overhead, но в данной теме речь явно не о них. Говорить о xml'ном избытке в Spring в конце 2016 года это уже моветон, на сегодняшний день Spring вполне может обходится без xml от слова совсем. В моем текущем проекте всего один xml файл, да и тот настройки для log4j2, т.е. к Spring отношения не имеет.
А так да, все можно написать на pure java, только времени это займет больше и поддерживать и развивать это будет сложнее.
 
 
Сообщения:9474
izon:
Говорить о xml'ном избытке в Spring в конце 2016 года это уже моветон, на сегодняшний день Spring вполне может обходится без xml от слова совсем.
Фу-фу-фу :)
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет