Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Web-приложение, структура... что изменить, сделать проще, понятнее? / 25 сообщений из 80, страница 1 из 4
19.01.2018, 15:41
    #39587180
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-приложение, структура... что изменить, сделать проще, понятнее?
В принципе, я и так разберусь в проекте, но хотелось бы, чтобы человек с улицы пришел, сел и за пару часов вкурил :))

Что использую:
Maven, Hibernate, Spring MVC, БД (PostgreSQL хотя не суть).

Задумался над структурой, если у меня сейчас такое количество пакетов и папок, то что будет, когда их будет хотя бы 30, не говоря уже о 100. Это же будет огромные количества однотипных папок, с однотипными файлами и т.д. Хотя по структуре вроде как все логично.
Нужны будут REST-запросы, это 100%, и маппинг таблиц в бд из Entity-файлов, ну и остальные плюшки Hiber'а.

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

.models.security.User.java Обычный Entity-файл
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.io.Serializable;

@Entity
public class User implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    private String name;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof User)) {
            return false;
        }
        User other = (User) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "src.User[ id=" + id + " ]";
    }
}


.models.security.UserDao.java Интерфейс
Код: java
1.
2.
3.
4.
5.
6.
7.
import java.util.List;

public interface UserDao {

    public List<User> getAllUsers();

}


.dao.security.UserDaoImpl.java имплементация интерфейса
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
@Component
public class UserDaoImpl implements UserDao {
    @Override
    public List<User> getAllUsers() {
        return null;
    }
}


.dao.security.UserProvider.java

Код: java
1.
2.
3.
4.
5.
public class UserProvider {

// здесь будут разные методы, возвращающие листы данных по тем или иным параметрам.

}


UserController
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Controller
public class UserController {

    private static final Logger log = Logger.getLogger(UserController.class);
    private UserDao userDao;

    @Autowired
    public UserController(UserDao userDao) {
        this.userDao = userDao;
    }

    @RequestMapping(value = "/users", method = RequestMethod.GET)
    @ResponseBody
    public List<User> getAllUsers() {
//        List<User> usersList =
        return null;
    }
}

...
Рейтинг: 0 / 0
19.01.2018, 15:42
    #39587181
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-приложение, структура... что изменить, сделать проще, понятнее?
развернули основные папки... :)
Здесь нельзя сразу несколько скринов прикрепить)
...
Рейтинг: 0 / 0
19.01.2018, 15:42
    #39587182
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-приложение, структура... что изменить, сделать проще, понятнее?
И еще один, последний...
поставил черточки маркером, чтобы визуально было проще разделить эту пачку папок
...
Рейтинг: 0 / 0
19.01.2018, 15:44
    #39587186
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-приложение, структура... что изменить, сделать проще, понятнее?
да твоюж! имя пакета всё-таки спалил)))
В общем, хотел бы получить критику по самую не балуйся, а так же советы, кто как подобные проекты пишет так, чтобы было потом не больно в них разбираться :)
...
Рейтинг: 0 / 0
19.01.2018, 15:48
    #39587190
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-приложение, структура... что изменить, сделать проще, понятнее?
Устал уже повторять. Пакеты нужно организовывать по фичам приложения, а не по слоям.
https://www.google.com/search?q=package by feature not layer
Если у вас появляется однотипный код, его нужно рефакторить и инкапсулировать общую функциональность, чтобы когда её придётся править, её не пришлось бы править везде.
lombok - убираем все свойства и toString() из сущностей.
С hashCode(), кстати в ORM не тривиально. Если у вас сущности не сохранены ещё, то у них у всех hashCode 0. Может боком вылезти.
UserDaoImpl не нужен. Нужен Spring Data.
DAO не нужен. Нужен Repository. Это разные паттерны.

Что за UserProvider без бутылки не разобраться. Не хватает в имени класса ключевого слова из модели предметной области.
...
Рейтинг: 0 / 0
19.01.2018, 15:50
    #39587191
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-приложение, структура... что изменить, сделать проще, понятнее?
Пакеты controllers, dao и models не нужны.
...
Рейтинг: 0 / 0
19.01.2018, 15:53
    #39587192
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-приложение, структура... что изменить, сделать проще, понятнее?
Nixic,

Называние UserProvider - ни о чем. Возможно имеется в виду Transaction Script, который инкапсулирует workflow модели предметной области?
...
Рейтинг: 0 / 0
19.01.2018, 16:29
    #39587214
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-приложение, структура... что изменить, сделать проще, понятнее?
BlazkowiczNixic,
Называние UserProvider - ни о чем. Возможно имеется в виду Transaction Script, который инкапсулирует workflow модели предметной области?
нет, нет, там будут методы аля:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
    public List<User> getAllUsers() throws SQLException {
        String sql = "from users ";
        usersList.clear();
        try (Connection c = DataSource.getConnection()) {
            try (PreparedStatement ps = c.prepareStatement(sql)) {
                try (ResultSet rs = ps.executeQuery()) {
                    while (rs.next()) {
                        User user = new User();
                        user.setName(rs.getString("name"));
                    }
                }
            }
        }
        return  usersList;
    }


Только без ResultSet'а, будет, а Hibernate'овскими запросами, я пока не готов сходу написать пример, но суть такая, что именно в этом классе будет вытаскивание данных из бд в Листы.
...
Рейтинг: 0 / 0
19.01.2018, 16:31
    #39587218
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-приложение, структура... что изменить, сделать проще, понятнее?
BlazkowiczUserDaoImpl не нужен. Нужен Spring Data.
Неоднозначно. Проект на скрине это без спринга на хиберAPI.
Тогда пусть топик и проект выкинет.
...
Рейтинг: 0 / 0
19.01.2018, 16:31
    #39587219
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-приложение, структура... что изменить, сделать проще, понятнее?
Nixic
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
    public List<User> getAllUsers() throws SQLException {
        String sql = "from users ";
        usersList.clear();
        try (Connection c = DataSource.getConnection()) {
            try (PreparedStatement ps = c.prepareStatement(sql)) {
                try (ResultSet rs = ps.executeQuery()) {
                    while (rs.next()) {
                        User user = new User();
                        user.setName(rs.getString("name"));
                    }
                }
            }
        }
        return  usersList;
    }



Это DAO.

NixicТолько без ResultSet'а, будет, а Hibernate'овскими запросами, я пока не готов сходу написать пример, но суть такая, что именно в этом классе будет вытаскивание данных из бд в Листы.
Для CRUD отдельного слоя не нужно. Для сложных запросов - Repository. Смотри Spring Data.
...
Рейтинг: 0 / 0
19.01.2018, 16:32
    #39587222
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-приложение, структура... что изменить, сделать проще, понятнее?
BlazkowiczNixic,
Называние UserProvider - ни о чем. Возможно имеется в виду Transaction Script, который инкапсулирует workflow модели предметной области?
Почитал паттерн, да, именно это и имелось ввиду :)
...
Рейтинг: 0 / 0
19.01.2018, 16:36
    #39587226
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-приложение, структура... что изменить, сделать проще, понятнее?
Nixic,
Чет я не понял.
Если хиберAPI то будет маппинг и session.saveORUpdare
Или ,springData?
...
Рейтинг: 0 / 0
19.01.2018, 16:39
    #39587229
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-приложение, структура... что изменить, сделать проще, понятнее?
Nixic
Код: java
1.
2.
3.
while (rs.next()) {
                        User user = new User();
                        user.setName(rs.getString("name"));


Это вообще за гранью.
...
Рейтинг: 0 / 0
19.01.2018, 16:40
    #39587230
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-приложение, структура... что изменить, сделать проще, понятнее?
Petro123Nixic,
Чет я не понял.
Если хиберAPI то будет маппинг и session.saveORUpdare
Или ,springData?
По идее, я хотел бы создавать свои сущности, не заботиться при этом о БД, и вообще поменьше в нее заходить по ходу разработки.
Но в дальнейшем, возможно, эта необходимость отпадет и поля с таблицами будут добавляться в БД руками.
Вообще, я так понимаю, нужно смотреть в сторону Spring Data, уже открыл пару ссылок :)

А что, получается, что либо маппинг сущностей в БД, либо Spting Data? Одно исключает другое?
...
Рейтинг: 0 / 0
19.01.2018, 16:48
    #39587233
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-приложение, структура... что изменить, сделать проще, понятнее?
BlazkowiczУстал уже повторять. Пакеты нужно организовывать по фичам приложения, а не по слоям.
https://www.google.com/search?q=package by feature not layer

Спасибо, это мы уже пару тройку лет назад обсуждали, да!)) но повторение мать сами знаете, кого )) Спасибо, перекидаю согласно бизнес-логики.
Blazkowiczlombok - убираем все свойства и toString() из сущностей.

Да, я его как-то пробовал, мне понравилось, хотя некоторых раздражает то, что кода не видно)
BlazkowiczС hashCode(), кстати в ORM не тривиально. Если у вас сущности не сохранены ещё, то у них у всех hashCode 0. Может боком вылезти.

Понял, пример создан на основе темплейта из Нетбинса, там он именно так генерится.
BlazkowiczUserDaoImpl не нужен. Нужен Spring Data.
DAO не нужен. Нужен Repository. Это разные паттерны.
Уже читаю, спасибо.

Кстати, это у меня не коммерческий проект, хоть там и сущности аля Контрагент, пакеты Отдела продаж, Снабжения, а попытка в свободное от работы на работе время, переписать основу старого своего проекта, где по возможности нужно использовать наиболее популярные технологии, приемы, паттерны и т.д. Ну а дальше уже перейти к клиентской части и там использовать что-то из современных JS фреймворков/библиотек, React JS в частности, хочу в нем использовать
...
Рейтинг: 0 / 0
19.01.2018, 16:50
    #39587238
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-приложение, структура... что изменить, сделать проще, понятнее?
Petro123Nixic
Код: java
1.
2.
3.
while (rs.next()) {
                        User user = new User();
                        user.setName(rs.getString("name"));


Это вообще за гранью.
Да я не дописал)) и вообще не буду этим пользоваться) Написано же) Ладно хоть точки с запятой поставил)
...
Рейтинг: 0 / 0
19.01.2018, 16:50
    #39587239
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-приложение, структура... что изменить, сделать проще, понятнее?
Nixic,
Код: java
1.
2.
Query query = session.createQuery("FROM Developer");
   List developers = query.list();
...
Рейтинг: 0 / 0
19.01.2018, 16:52
    #39587241
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-приложение, структура... что изменить, сделать проще, понятнее?
NixicА что, получается, что либо маппинг сущностей в БД, либо Spting Data? Одно исключает другое?да.
Выбирай.
Золотой пули нету.
...
Рейтинг: 0 / 0
19.01.2018, 16:52
    #39587243
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-приложение, структура... что изменить, сделать проще, понятнее?
Petro123Nixic
Код: java
1.
2.
3.
while (rs.next()) {
                        User user = new User();
                        user.setName(rs.getString("name"));


Это вообще за гранью.
А кстати, что тут такого? Берем создаем юзера, из резултСета тянем имя, сеттим ему имя, потом тут же надо было дописать,
кладем его в лист.
потом этот лист возвращаем и используем, вроде как обычно... нет?
...
Рейтинг: 0 / 0
19.01.2018, 16:54
    #39587247
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-приложение, структура... что изменить, сделать проще, понятнее?
Nixic,
В цикле это jdbc
...
Рейтинг: 0 / 0
19.01.2018, 16:56
    #39587250
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-приложение, структура... что изменить, сделать проще, понятнее?
NixicА что, получается, что либо маппинг сущностей в БД, либо Spting Data? Одно исключает другое?
Вы кажется недочитали про Spring Data. Это удобная обертка над JPA, чтобы избавится от всякого повторяющегося однотипного кода, о котором вы спрашиваете. А JPA, соответсвенно API, например, к Hibernate.
...
Рейтинг: 0 / 0
19.01.2018, 16:58
    #39587254
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-приложение, структура... что изменить, сделать проще, понятнее?
Blazkowicz,
Где то тема была, обсуждали предпочтения.
...
Рейтинг: 0 / 0
19.01.2018, 16:59
    #39587255
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-приложение, структура... что изменить, сделать проще, понятнее?
Это да, еще не прочитал совсем ничего почти :)
Пойду читать про Spring Data, раскидывать пакеты/классы по слоям по БЛ, подключать lombok... :)
...
Рейтинг: 0 / 0
19.01.2018, 17:08
    #39587265
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-приложение, структура... что изменить, сделать проще, понятнее?
Nixic,
Спринге больше магии. Нравится, делай. Если нет, то хиберApi.
Удачи.
...
Рейтинг: 0 / 0
22.01.2018, 05:50
    #39588017
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web-приложение, структура... что изменить, сделать проще, понятнее?
NixicЭто да, еще не прочитал совсем ничего почти :)
Пойду читать про Spring Data, раскидывать пакеты/классы по слоям по БЛ, подключать lombok... :)

Заодно про реализацию HATEOS в Spring...
Чтобы REST-контроллеры не писать :-)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Web-приложение, структура... что изменить, сделать проще, понятнее? / 25 сообщений из 80, страница 1 из 4
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]