Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Вопрос от новичка - как правильно в ООП использовать справочники  [new]
Сергей Прокопенко 8
Member

Откуда: Sevastopol
Сообщений: 20
Добрый день, заранее прошу прощения за тупой вопрос:

У меня есть рейсы и список маршрутов, на каждый рейс один из фиксированного списка маршрутов(1н ко многим)
Создаю классы и тех и других.
Как правильно мне привязать маршруты к рейсам?
"По старинке" вне ООП яб бы просто в списке или таблице или классе в переменную номера маршрута заносил код из списка маршрутов, а затем по функции обращаясь к списку маршрутов извлекал наименование и другие характеристики.

А как быть соблюдая принципы ООП?
Передавать значение маршрута в соотв.свойство объекта рейса, не раздуются ли данные?
Делать наследование? Рейс наследуется от маршрута? с чего это у них разные методы, я лучше сделаю наследование какое нибудь сложного рейса от рейса, чем связывать разные сущности.

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

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

Или передавать извлекая значения методами из одного класса в метод другому? - очень похоже на старый классический, процедурный способ.

Знакомы java-сты говорят - учи spring не лезь в дебри.
В интернете нечего кроме совета: в книге: Head First. Паттерны проектирования. Бейтс Берт, Фримен Эрик - все объяснено не нашел. Пролистал, большие сомнения, чтоб ответить на такой вроде бы простой вопрос: академический способ использования справочников в модели ООП надо прочитать всю книгу..

Помогите пожалуйста новичку!
16 апр 20, 20:35    [22117751]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос от новичка - как правильно в ООП использовать справочники  [new]
mad_nazgul
Member

Откуда:
Сообщений: 5301
Сергей Прокопенко 8,
У каждого рейса есть уникальный маршрут, который определяется точками на карте в пространстве и времени.
Т.е. каждый рейс хранит эти точки у себя в объекте.
Для создания рейса нужна фабрика, которая заполняет данные, в т.ч. и маршрут рейса, по неким правилам.
Где-то так. :-)
17 апр 20, 05:59    [22117852]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос от новичка - как правильно в ООП использовать справочники  [new]
hVostt
Member

Откуда:
Сообщений: 17519
Сергей Прокопенко 8
Как правильно мне привязать маршруты к рейсам?


Полностью зависит от того, что вы будете с этим делать, как вы работаете с этим дальше, зачем вам это вообще нужно.

Сергей Прокопенко 8
"По старинке" вне ООП яб бы просто в списке или таблице или классе в переменную номера маршрута заносил код из списка маршрутов, а затем по функции обращаясь к списку маршрутов извлекал наименование и другие характеристики.


Ну и что вам мешает так делать? В ООП вам нужно думать о том, где разместить функцию, как будет организована логика, а не о том, как данные хранить, вам для этого достаточно классов-сущностей или POJO.
17 апр 20, 06:06    [22117853]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос от новичка - как правильно в ООП использовать справочники  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4852
Сергей Прокопенко 8,
По ООП нужно больше рисовать и меньше говорить.
Например схему связей сущностей.
Где она?
17 апр 20, 10:34    [22117926]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос от новичка - как правильно в ООП использовать справочники  [new]
WGA
Member

Откуда:
Сообщений: 401
Сергей Прокопенко 8, эталонной библиотекой, реализующей объектно-ориентированный подход к работе с реляционными данными, является Hibernate.
В их интерпретации, правильно делать так:

@Entity
public class Route {
    @Id
    private String code;
}

@Entity
public class Cargo {
..............
    @ManyToOne
    @JoinColumn(name = "route_code")
    private Route route;
..............
}
}
17 апр 20, 10:35    [22117927]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос от новичка - как правильно в ООП использовать справочники  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 17740
Сергей Прокопенко 8,

цель всего этого?
17 апр 20, 11:06    [22117943]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос от новичка - как правильно в ООП использовать справочники  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4852
WGA,
Это если у него ОРМ есть в проекте. А не jdbc.
Мы гадаем, автор молчит.
17 апр 20, 11:28    [22117953]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос от новичка - как правильно в ООП использовать справочники  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4852
WGA,
> эталон
Счас придет мембер А и скажет что эталон это спринг.
Потом мембер Б скажет что эталон это хранимка в бд. Она быстрее.
Потом мембер С скажет что справочники из облака надо брать.
17 апр 20, 11:31    [22117955]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос от новичка - как правильно в ООП использовать справочники  [new]
Kachalov
Member

Откуда: Москва
Сообщений: 5715
WGA
Hibernate.
В их интерпретации, правильно делать так

- в приведенном Вами коде нет специфичных для Hibernate нотаций, Вы сумели воспроизвести эталонный пример из JPA
17 апр 20, 11:39    [22117960]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос от новичка - как правильно в ООП использовать справочники  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4852
Kachalov
WGA
Hibernate.
В их интерпретации, правильно делать так

- в приведенном Вами коде нет специфичных для Hibernate нотаций, Вы сумели воспроизвести эталонный пример из JPA

+1
17 апр 20, 11:40    [22117964]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос от новичка - как правильно в ООП использовать справочники  [new]
WGA
Member

Откуда:
Сообщений: 401
Kachalov
WGA
Hibernate.
В их интерпретации, правильно делать так

- в приведенном Вами коде нет специфичных для Hibernate нотаций, Вы сумели воспроизвести эталонный пример из JPA
Если я начну ему рассказывать про JPA и Hibernate, и как они соотносятся, то, боюсь, он бросит программирование. По-крайней мере бэкендовое ))

ЗЫ. Раз пошла такая гулянка, то аннотации JPA (все без исключения, afaik) являются подмножеством Hibernate.

Сообщение было отредактировано: 17 апр 20, 11:43
17 апр 20, 11:42    [22117965]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос от новичка - как правильно в ООП использовать справочники  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4852
WGA,
Он спросил про "наследоваться или агрегироваться".
Тут вообще код не должен быть.
17 апр 20, 12:01    [22117982]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос от новичка - как правильно в ООП использовать справочники  [new]
Kachalov
Member

Откуда: Москва
Сообщений: 5715
WGA
аннотации JPA (все без исключения, afaik) являются подмножеством Hibernate

- или EclipseLink? JPA - это спецификация, которую реализуют различные ORM

WGA
Если я начну ему рассказывать про JPA и Hibernate ...

- так начните с простого, с хорошо документированной спецификации, на которую Вы по факту и ссылаетесь
17 апр 20, 12:36    [22118002]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос от новичка - как правильно в ООП использовать справочники  [new]
Kachalov
Member

Откуда: Москва
Сообщений: 5715
Сергей Прокопенко 8
в классе рейса создаю переменную класса маршрут

- да (альтернативно - переменную с идентификатором маршрута и подтягивать маршрут по идентификатору при необходимости)

Сергей Прокопенко 8
теперь при создании каждого объекта рейса мне еще будет в нем создаваться объект маршрута? зачем? их маршрутов допустим всего 40шт. они уже созданы в main-е и не меняются ни как от наличия или отсутствия рейсов, зачем все раздувать?

- либо передавать ссылку на "объект маршрут" (при этом создавать его каждый раз не нужно), либо лениво его инициализировать (подтягивать объект при обращении)

Сергей Прокопенко 8
Помогите пожалуйста новичку!

- Вы не уточнили как именно Вы обращаетесь к данным в БД и это затрудняет коллегам возможность дать релевантный совет. Если Вы работаете с БД через JDBC одни решения будут проще, если через ORM - другие. В общем желательно описать платформу и технологии задействованные в проекте. Ну и конечно, есть много нюансов связанных с самим проектом (количества данных, частотой обращения к данным и т п).
17 апр 20, 12:45    [22118007]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос от новичка - как правильно в ООП использовать справочники  [new]
mayton
Member

Откуда: loopback
Сообщений: 46646
WGA

ЗЫ. Раз пошла такая гулянка, то аннотации JPA (все без исключения, afaik) являются подмножеством Hibernate.

Может наоборот?
17 апр 20, 13:34    [22118031]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос от новичка - как правильно в ООП использовать справочники  [new]
mad_nazgul
Member

Откуда:
Сообщений: 5301
mayton
WGA

ЗЫ. Раз пошла такая гулянка, то аннотации JPA (все без исключения, afaik) являются подмножеством Hibernate.

Может наоборот?


Нет. Т.к. множество аннотаций Hibernate включают в себя множество аннотаций JPA.
А вот наоборот - нет. :-)
17 апр 20, 15:30    [22118096]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос от новичка - как правильно в ООП использовать справочники  [new]
Kachalov
Member

Откуда: Москва
Сообщений: 5715
mad_nazgul
Нет. Т.к. множество аннотаций Hibernate включают в себя множество аннотаций JPA.
А вот наоборот - нет. :-)

- давно пакет javax.persistence.* относится к Hibernate/RedHat?
17 апр 20, 16:08    [22118125]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос от новичка - как правильно в ООП использовать справочники  [new]
mayton
Member

Откуда: loopback
Сообщений: 46646
mad_nazgul
mayton
пропущено...

Может наоборот?


Нет. Т.к. множество аннотаций Hibernate включают в себя множество аннотаций JPA.
А вот наоборот - нет. :-)

Ахаха.
17 апр 20, 16:21    [22118136]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос от новичка - как правильно в ООП использовать справочники  [new]
Сергей Прокопенко 8
Member

Откуда: Sevastopol
Сообщений: 20
Kachalov,

Спасибо, вот наверно так и поступлю: буду передавать ссылку на объект маршрута.
17 апр 20, 18:31    [22118203]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос от новичка - как правильно в ООП использовать справочники  [new]
Сергей Прокопенко 8
Member

Откуда: Sevastopol
Сообщений: 20
Спасибо за комментарии
Прочитал еще здесь: https://qna.habr.com/q/368548

Есть работающий php-проект который хотелось не спешно перевести на java.
К БД подключение будет тогда jdbc -так наверно проще и "прозрачнее".

В объекте "рейс" буду хранить ссылки на объекты маршрутов, машин, водителей и т.д.

А обрабатывать логику буду еще 1м верхним классом, тогда примерно будут соответствовать классы - таблицам.

А с ORM(т.е. Hibernate) разберусь потом.. если рядом будут коллеги и желающие в это вникать.
17 апр 20, 18:45    [22118213]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос от новичка - как правильно в ООП использовать справочники  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4852
Сергей Прокопенко 8,
Если jdbc то ссылкой вполне может быть FK субд.
Так вообще "прозрачно". Как в PHP))
17 апр 20, 20:11    [22118237]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос от новичка - как правильно в ООП использовать справочники  [new]
mad_nazgul
Member

Откуда:
Сообщений: 5301
Kachalov
mad_nazgul
Нет. Т.к. множество аннотаций Hibernate включают в себя множество аннотаций JPA.
А вот наоборот - нет. :-)

- давно пакет javax.persistence.* относится к Hibernate/RedHat?


И-и-и...
Мы же говорим об имплементации, а не декларации. :-)
20 апр 20, 14:30    [22119213]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос от новичка - как правильно в ООП использовать справочники  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 8557
Частично попытался ответить на те вопросы, которые смог вычленить из текста.

Сергей Прокопенко 8

Как правильно мне привязать маршруты к рейсам?
"По старинке" вне ООП яб бы просто в списке или таблице или классе в переменную номера маршрута заносил код из списка маршрутов, а затем по функции обращаясь к списку маршрутов извлекал наименование и другие характеристики.

В ООП все так же

Сергей Прокопенко 8

Передавать значение маршрута в соотв.свойство объекта рейса, не раздуются ли данные?

Нет, не раздуется.

Сергей Прокопенко 8

Делать наследование? Рейс наследуется от маршрута? с чего это...

So do I
причин наследовать так же не вижу.

Сергей Прокопенко 8

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

Упрощенно - да.

Сергей Прокопенко 8

а создаваемый внутри объект маршрута жив пока использую объект и это не сильно увиличивает объем?

Если Вы будете СОЗДАВАТЬ оператором new - то потребление памяти будет увеличиваться

Если Вы НЕ будете создавать (зачем "создаваемый внутри" мне не понятно) - то НЕ сильно

AFAIK
20 апр 20, 14:47    [22119225]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос от новичка - как правильно в ООП использовать справочники  [new]
Kachalov
Member

Откуда: Москва
Сообщений: 5715
mad_nazgul

Т.к. множество аннотаций Hibernate включают в себя множество аннотаций JPA.
А вот наоборот - нет. :-)
...
И-и-и...
Мы же говорим об имплементации, а не декларации. :-)

- Вы уж определитесь о чем говорите, а то я по наивности все буквально воспринимаю, написано про "аннотации", так я о них и толкую. А что там за имплементации у аннотации - просветите?
20 апр 20, 15:49    [22119263]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос от новичка - как правильно в ООП использовать справочники  [new]
mad_nazgul
Member

Откуда:
Сообщений: 5301
Kachalov
mad_nazgul

Т.к. множество аннотаций Hibernate включают в себя множество аннотаций JPA.
А вот наоборот - нет. :-)
...
И-и-и...
Мы же говорим об имплементации, а не декларации. :-)

- Вы уж определитесь о чем говорите, а то я по наивности все буквально воспринимаю, написано про "аннотации", так я о них и толкую. А что там за имплементации у аннотации - просветите?


Э-э-э т.е. если прописать аннотации, без подключения имплиметанации, хотя бы OpenJPA, то они будут работать?!
Вроде бы нет.
Хибер поддеривает все аннотации JPA плюс еще есть свои аннотации.
Т.о. множество аннотаций хибера больше области аннотаций JPA.
21 апр 20, 05:35    [22119597]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Java Ответить