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

Что использую:
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
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39587181
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
развернули основные папки... :)
Здесь нельзя сразу несколько скринов прикрепить)
...
Рейтинг: 0 / 0
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39587182
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще один, последний...
поставил черточки маркером, чтобы визуально было проще разделить эту пачку папок
...
Рейтинг: 0 / 0
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39587186
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да твоюж! имя пакета всё-таки спалил)))
В общем, хотел бы получить критику по самую не балуйся, а так же советы, кто как подобные проекты пишет так, чтобы было потом не больно в них разбираться :)
...
Рейтинг: 0 / 0
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39587190
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Устал уже повторять. Пакеты нужно организовывать по фичам приложения, а не по слоям.
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
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39587191
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пакеты controllers, dao и models не нужны.
...
Рейтинг: 0 / 0
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39587192
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nixic,

Называние UserProvider - ни о чем. Возможно имеется в виду Transaction Script, который инкапсулирует workflow модели предметной области?
...
Рейтинг: 0 / 0
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39587214
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39587218
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczUserDaoImpl не нужен. Нужен Spring Data.
Неоднозначно. Проект на скрине это без спринга на хиберAPI.
Тогда пусть топик и проект выкинет.
...
Рейтинг: 0 / 0
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39587219
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39587222
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczNixic,
Называние UserProvider - ни о чем. Возможно имеется в виду Transaction Script, который инкапсулирует workflow модели предметной области?
Почитал паттерн, да, именно это и имелось ввиду :)
...
Рейтинг: 0 / 0
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39587226
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nixic,
Чет я не понял.
Если хиберAPI то будет маппинг и session.saveORUpdare
Или ,springData?
...
Рейтинг: 0 / 0
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39587229
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nixic
Код: java
1.
2.
3.
while (rs.next()) {
                        User user = new User();
                        user.setName(rs.getString("name"));


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

А что, получается, что либо маппинг сущностей в БД, либо Spting Data? Одно исключает другое?
...
Рейтинг: 0 / 0
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39587233
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39587238
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Nixic
Код: java
1.
2.
3.
while (rs.next()) {
                        User user = new User();
                        user.setName(rs.getString("name"));


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


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

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


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