Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Huge
3 / 3 / 14
Регистрация: 26.01.2016
Сообщений: 481
1

Посоветуйте как улучшить код

10.03.2017, 19:19. Просмотров 269. Ответов 14
Метки нет (Все метки)

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
56
57
58
59
60
61
62
63
64
65
 
 
@Autowired
    private ClothFabricRepository clothFabricRepository;
    @Autowired
    private CurtainRepository curtainRepository;
    @Autowired
    private OrderCurtainRepository orderCurtainRepository;
    @Autowired
    private TulleRepository tulleRepository;
    @Autowired
    private UpholsteryFabricRepository upholsteryFabricRepository;
 
    @Transactional
    public void changeInfoInDB(final String idFabric, final String photo,
                               final String name, final Double quantityFromUI) {
       final String clothFabric = "clothFabric";
        final String curtainFabric = "curtain";
        final String orderFabric = "orderCurtain";
        final String tulleFabric = "tulle";
        final String upholsteryFabric = "upholsteryFabric";
 
        String[] split = photo.split("/");
//        System.out.println("SPLIT[0]  "+split[0]+"  SPLIT[1]"+ split[1]);
 
       if(split[1].contains(clothFabric)) {
 
           List<ClothFabricModel> clothFabricModels = clothFabricRepository.findById(id);
            ClothFabricModel model = clothFabricModels.get(0);
           Double quantityInDB = model.getQuantity();
           if (quantityInDB == 0) {
               System.out.println("In DB ZERO");
           } else {
 
               Double result = quantityInDB - quantityFromUI;
               model.setQuantity(result);
               clothFabricRepository.save(model);
           }
       } else if (split[1].contains(curtainFabric)){
 
           List<CurtainModel> listModel = curtainRepository.findById(id);
           CurtainModel model = listModel.get(0);
           Double quantityInDB = model.getQuantity();
           if (quantityInDB == 0) {
               System.out.println("In DB ZERO");
           } else {
 
               Double result = quantityInDB - quantityFromUI;
               model.setQuantity(result);
               curtainRepository.save(model);
           }
 
       } else if (split[1].contains(orderFabric)){
           List<OrderCurtainModel> listModel = orderCurtainRepository.findById(id);
           OrderCurtainModel model = listModel.get(0);
           Double quantityInDB = model.getQuantity();
           if (quantityInDB == 0) {
               System.out.println("In DB ZERO");
           } else {
 
               Double result = quantityInDB - quantityFromUI;
               model.setQuantity(result);
               orderCurtainRepository.save(model);
           }
       }
У меня получается один и тот же код повторяется, но разные репозитории и модели. Посоветуйте как его сделать лучше?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.03.2017, 19:19
Ответы с готовыми решениями:

Подскажите как улучшить код (убрать лишний цикл)
Всем доброго времени суток! Есть программа которая делает гистограмму...

Ввести с клавиатуры три числа, и вывести их в порядке убывания. Как улучшить код?
Подскажите , как улучшить это ? Сделать более компактным чтоль. А то мне...

Посоветуйте, как оптимизировать код!
Программа переводит минуты в часы. import java.io.IOException; import...

Как перевести код с паскаля на Java. Пытался сам но код не хочет работать переведенный
А сам код на паскале работает. Вот код на паскале var i,j,m,c,d: integer; ...

Как расположить код из статьи в файлах (код прилагается)?
Вопрос в следующем. Есть статья на тему &quot;Захват видео с web камеры средствами...

14
aleksandy
630 / 522 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
10.03.2017, 21:05 2
Репозитории параметризуй генериками, модели должны имплементировать один интерфейс (или иметь общего предка), чтобы getQuantity/setQuantity дёргать можно было.
0
xoraxax
1450 / 1347 / 401
Регистрация: 05.07.2013
Сообщений: 6,519
Завершенные тесты: 2
10.03.2017, 21:33 3
а может эту всю фигню описать одним классом, добавить поле type, забить типы в енум и не парить мозг?
0
Huge
3 / 3 / 14
Регистрация: 26.01.2016
Сообщений: 481
11.03.2017, 11:31  [ТС] 4
Предложение aleksandy понял сам думал так сделать, а вот Ваше xoraxax не понял. Не понял эту часть
HTML5
1
добавить поле type, забить типы в енум
можно пример?
0
xoraxax
1450 / 1347 / 401
Регистрация: 05.07.2013
Сообщений: 6,519
Завершенные тесты: 2
11.03.2017, 12:58 5
Curtain, cloth и все остальное опиши в одном классе, например, goods. В класс добавь поле goodsType. Я просто пока не совсем понимаю, почему это все разные сущности.
0
Huge
3 / 3 / 14
Регистрация: 26.01.2016
Сообщений: 481
11.03.2017, 16:21  [ТС] 6
Это разные табл в БД, я саму БД создавал с помощью hibernate, поэтому каждую таблицу описывал отдельно. Мне так показывали, если возможно по другому, то буду рад повысить свои знания. каждая табл выглядит примерно так:
Кликните здесь для просмотра всего текста
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
Entity
@Table(name = "CLOTH", schema = "public")
public class ClothModel extends AllFabricModel{
 
    @Column(name = "PHOTO")
    private String photo;
    @Column(name = "PHOTO01")
    private String photo01;
    @Column(name = "PHOTO02")
    private String photo02;
    @Column(name = "PHOTO03")
    private String photo03;
    @Column(name = "PHOTO04")
    private String photo04;
    @Column(name = "PHOTO05")
    private String photo05;
    @Id
    @Column(name = "ID")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
    @Column
    private String name;
    @Column(name = "DESCRIPTION")
    private String description;
    @Column(name = "STRUCTURE") //organza, curtain ....
    private String structure;
    @Column(name = "PAINT") //abstraction, geometric  ....
    private String paint;
    @Column(name = "HEIGHT")
    private String height;
    @Column(name = "COLOR")
    private String color;
    @Column(name = "QUANTITY")
    private Double quantity;
    @Column(name = "PRICE")
    private BigDecimal price;

у меня даже extends не было, т.к. делал предка в DTO, а к базе старался минимизировать доступ.
0
xoraxax
1450 / 1347 / 401
Регистрация: 05.07.2013
Сообщений: 6,519
Завершенные тесты: 2
11.03.2017, 16:34 7
Так если у тебя все сущности выглядят и ведут себя одинаково, зачем их хранить в разных таблицах, зачем описывать разными классами, если по сути это одно и то же, ты можешь объяснить?
0
Huge
3 / 3 / 14
Регистрация: 26.01.2016
Сообщений: 481
11.03.2017, 23:38  [ТС] 8
Я не пойму, а как можно было создать все эти базы без описания?

Добавлено через 13 минут
описать один класс а потом наследовать, как же название таблиц?

Добавлено через 4 часа 5 минут
Мда, а можно пример как параметризировать похожие репозитории генериками, а то что-то или суббота или все таки не понимаю(
0
KEKCoGEN
Эксперт Java
2077 / 1945 / 506
Регистрация: 28.12.2010
Сообщений: 7,809
11.03.2017, 23:42 9
Huge, похоже все ваши проблемы от неверного проектирования БД. Покажите ваши таблицы БД.
0
Huge
3 / 3 / 14
Регистрация: 26.01.2016
Сообщений: 481
12.03.2017, 10:15  [ТС] 10
вот одна из них таких, подобных, 5шт
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
Entity
@Table(name = "CLOTH", schema = "public")
public class ClothModel extends AllFabricModel{
 
    @Column(name = "PHOTO")
    private String photo;
    @Column(name = "PHOTO01")
    private String photo01;
    @Column(name = "PHOTO02")
    private String photo02;
    @Column(name = "PHOTO03")
    private String photo03;
    @Column(name = "PHOTO04")
    private String photo04;
    @Column(name = "PHOTO05")
    private String photo05;
    @Id
    @Column(name = "ID")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
    @Column
    private String name;
    @Column(name = "DESCRIPTION")
    private String description;
    @Column(name = "STRUCTURE") //organza, curtain ....
    private String structure;
    @Column(name = "PAINT") //abstraction, geometric  ....
    private String paint;
    @Column(name = "HEIGHT")
    private String height;
    @Column(name = "COLOR")
    private String color;
    @Column(name = "QUANTITY")
    private Double quantity;
    @Column(name = "PRICE")
    private BigDecimal price;
Далее есть табл для авторизации и к ней персонализация (Юзер, Модератор, Админ)
Сейчас начинаю писать табл Заказчик/заказ(OneToMany) тоже будут вопросы.
Но хочу этот код упростить, т.к. Идея пишет ошибку, повторяющийся код
0
KEKCoGEN
Эксперт Java
2077 / 1945 / 506
Регистрация: 28.12.2010
Сообщений: 7,809
12.03.2017, 10:58 11
Цитата Сообщение от Huge Посмотреть сообщение
вот одна из них таких, подобных, 5шт
если у вас подобных 5 штук, у вас неверная архитектура. Нет причины держать 5 одинаковых таблиц в БД. Удалите 4 и оставьте одну.

Так же вынесите фото в коллекцию.
0
Huge
3 / 3 / 14
Регистрация: 26.01.2016
Сообщений: 481
12.03.2017, 22:55  [ТС] 12
хорошо оставлю одну, а как их создавать через hibernate?
0
KEKCoGEN
Эксперт Java
2077 / 1945 / 506
Регистрация: 28.12.2010
Сообщений: 7,809
13.03.2017, 00:16 13
Huge, ненадо их создавать через hibernate. Руками создавайте. Это хорошая практика.
0
Huge
3 / 3 / 14
Регистрация: 26.01.2016
Сообщений: 481
13.03.2017, 19:09  [ТС] 14
Это практика хорошая, но когда из-за деплоя приходится менять БД, то практика создавать базу из под hibernate очень себя оправдала. Когда мне с MySQL пришлось переводить все на PostgreSQL, именно hibernate я обязан за норм перевод manyToMany, OneToOne все сделал за 1 create.
А до этого, пока умные люди не сказали, что Hibernate сам может создавать БД перелопатил кучу литературы и все равно толком не выходило описать + не знаю как у кого, а у меня pgAdmin4 глючит, через раз загружаясь и слетая при входе в большую БД.

Добавлено через 14 минут
В общем то разобрался, код сократи,л создав отдельный класс для повторения. Спасибо за Ваши ответы
0
KEKCoGEN
Эксперт Java
2077 / 1945 / 506
Регистрация: 28.12.2010
Сообщений: 7,809
13.03.2017, 20:52 15
Huge, с хибернейт можно создать бд пока система еще не в пррдакшне. Дальше уже нельзя.
0
13.03.2017, 20:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2017, 20:52

Посоветуйте, как читать Хорстманна
Читаю-читаю. Тут восхищаюсь понятно поданным материалом, а тут понять не могу....

Посоветуйте, как начать проект
Я хочу сделать &quot;игру для программистов&quot;. Вид сверху, присутствуют стены:...

Посоветуйте как лучше спроектировать взаимодействие классов
Изучаю Джаву. В качестве учебного проекта пишу игру. Написал два класса: 1....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru