|
|
|
Подскажите паттерн
|
|||
|---|---|---|---|
|
#18+
Всем привет. Есть некий набор типов с именами: type1, type2, type3 По имени которое прилетает из вне мне нужно создать класс, соответствующий данному типу. Каждый класс со своим набором полей. Делать так, как мне кажется не очень красиво: Код: java 1. 2. 3. Подскажите какой лучше паттерн использовать для решения подобных задач? Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 13:23 |
|
||
|
Подскажите паттерн
|
|||
|---|---|---|---|
|
#18+
JulT, Ну, эта. Типа в фабрику надо это всё засунуть. А реализация уже зависит от того на сколько динамично у вас эти типы классы\ у вас меняются. Если список классов очень устойчивый и на каждый тип есть куча статичной бизнес-логики, то я бы это всё у enum унёс. Более простое к изменениям решение это записать маппинг тип-класс в файл. Может быть полезным если вдруг такой маппинг надо задавать извне. А если нужна полноценная динамика с реализациями в разных jar-ах, то есть смысл на SPI посмотреть https://docs.oracle.com/javase/tutorial/ext/basics/spi.html В целом, недостаточно вводных данных для принятия решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 13:34 |
|
||
|
Подскажите паттерн
|
|||
|---|---|---|---|
|
#18+
JulT, Ещё часто такой паттерн называют "Реестром". По-хорошему "имя типа" должен предоставлять сам тип. Но в Java это не так просто в связи с тем как реализована статика. Нет виртуальных вызовов для статических методов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 13:38 |
|
||
|
Подскажите паттерн
|
|||
|---|---|---|---|
|
#18+
BlazkowiczВ целом, недостаточно вводных данных для принятия решения. +1 Кроме того Фабричный метод требует чтобы они были наследниками абстрактного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 13:41 |
|
||
|
Подскажите паттерн
|
|||
|---|---|---|---|
|
#18+
JulT, Вообще, я ничего плохого в вашем коде 2 строки не вижу. У нас if запрещён? Много полей? Тогда Строитель. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 13:44 |
|
||
|
Подскажите паттерн
|
|||
|---|---|---|---|
|
#18+
Petro123Вообще, я ничего плохого в вашем коде 2 строки не вижу. Ничего? - Много синтаксического шума. - Имя типа отделено от самого типа - Используются строки, там где должны быть константы - Маппинг имени на тип смешан с процессом создания экземпляра - Код не устойчив к NPE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 13:48 |
|
||
|
Подскажите паттерн
|
|||
|---|---|---|---|
|
#18+
BlazkowiczJulT, Ну, эта. Типа в фабрику надо это всё засунуть. А реализация уже зависит от того на сколько динамично у вас эти типы классы\ у вас меняются. Если список классов очень устойчивый и на каждый тип есть куча статичной бизнес-логики, то я бы это всё у enum унёс. Более простое к изменениям решение это записать маппинг тип-класс в файл. Может быть полезным если вдруг такой маппинг надо задавать извне. А если нужна полноценная динамика с реализациями в разных jar-ах, то есть смысл на SPI посмотреть https://docs.oracle.com/javase/tutorial/ext/basics/spi.html В целом, недостаточно вводных данных для принятия решения. Пробую так: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Код: java 1. 2. 3. Код: java 1. 2. Код: java 1. 2. А если хочу параметры передать в конструктор класса? Покритикуйте пожалуйста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 13:53 |
|
||
|
Подскажите паттерн
|
|||
|---|---|---|---|
|
#18+
BlazkowiczPetro123Вообще, я ничего плохого в вашем коде 2 строки не вижу. Ничего? - Используются строки, там где должны быть константы - Код не устойчив к NPE Я не стала заморачиваться, а вообще, конечно, вы правы. Надо так: Код: java 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 13:58 |
|
||
|
Подскажите паттерн
|
|||
|---|---|---|---|
|
#18+
BlazkowiczPetro123Вообще, я ничего плохого в вашем коде 2 строки не вижу. Ничего? - Много синтаксического шума. - Имя типа отделено от самого типа - Используются строки, там где должны быть константы - Маппинг имени на тип смешан с процессом создания экземпляра - Код не устойчив к NPE Вы главное скажите ему когда начнется ОВЕРХЕД. Его бывает, тоже не видно. И потом шум другого рода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 13:58 |
|
||
|
Подскажите паттерн
|
|||
|---|---|---|---|
|
#18+
JulT Код: java 1. Ну, это и ежу понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 13:59 |
|
||
|
Подскажите паттерн
|
|||
|---|---|---|---|
|
#18+
Petro123JulT, Вообще, я ничего плохого в вашем коде 2 строки не вижу. У нас if запрещён? Много полей? Тогда Строитель. в моем случае около 20 типов имен, соответственно, 20 типов классов. Каждый класс представляет из себя холдер с параметрами для отправки http риквеста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 14:00 |
|
||
|
Подскажите паттерн
|
|||
|---|---|---|---|
|
#18+
JulTмоем случае около 20 типов имен, Вот и делают чтоб вас поняли jf ( и троеточие до 20-ти. IMHO. Откуда поступают 20 имён? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 14:09 |
|
||
|
Подскажите паттерн
|
|||
|---|---|---|---|
|
#18+
JulTПробую так: Уже тепло. Для нескольких типов я бы так и делал. Но для 20 энум выходит довольно кривой. JulT Код: java 1. 2. 3. Supplier JulTА если хочу параметры передать в конструктор класса? Разные для разных типов? Просто не понятно если параметры одинаковые, то тупо добавить в методы. Если параметры разные, то к чему вообще весь сыр-бор, если для параметров вам нужно знать и конкретный тип. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 14:11 |
|
||
|
Подскажите паттерн
|
|||
|---|---|---|---|
|
#18+
JulT, Код: java 1. 2. 3. 4. Вы так и не рассказали какую именно проблему вы решаете отделя имя типа от самого типа. Можно с тем же успехом использовать полное имя класса + Class.forName(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 14:14 |
|
||
|
Подскажите паттерн
|
|||
|---|---|---|---|
|
#18+
BlazkowiczJulT, Код: java 1. 2. 3. 4. Вы так и не рассказали какую именно проблему вы решаете отделя имя типа от самого типа. Можно с тем же успехом использовать полное имя класса + Class.forName(). Имя типа прилетает с bpmn процесса. Прилетает в один общий метод. На основании этого типа формируется мапа с параметрами и далее происходит http запрос с передачей этих параметров. Это то, как сделано сейчас, не мной. Но дело в том, что в зависимости от типа мапа должна фаршироваться разными параметрами. В одном случае нужно передать authorID - map.put("authorID", operatorId); в другом нет. Ставить кучу ифов мне не нравится. Поэтому и хочу по имени определять класс, в котором будет лежать свой собственный map с параметрами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 14:25 |
|
||
|
Подскажите паттерн
|
|||
|---|---|---|---|
|
#18+
JulTИмя типа прилетает с bpmn процесса. Прилетает в один общий метод. Дайте пример этих слов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 14:29 |
|
||
|
Подскажите паттерн
|
|||
|---|---|---|---|
|
#18+
JulT, Формирование мапы с параметрами можно заменить Строитель. Гляньте. Мож.подойдёт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 14:31 |
|
||
|
Подскажите паттерн
|
|||
|---|---|---|---|
|
#18+
Petro123JulTИмя типа прилетает с bpmn процесса. Прилетает в один общий метод. Дайте пример этих слов. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. register - вызывается в bpmn, там простыня xml-ая ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 14:38 |
|
||
|
Подскажите паттерн
|
|||
|---|---|---|---|
|
#18+
Petro123JulT, Формирование мапы с параметрами можно заменить Строитель. Гляньте. Мож.подойдёт. Я просто не хочу писать типа: Код: java 1. 2. 3. И т.д. Более того, по типу иногда нужно сходить в базу, получить доп инфу и тоже добавить в мапу. Т.е. этих ифов в данном месте может быть много. Я хочу изолировать эту работу в классы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 14:43 |
|
||
|
Подскажите паттерн
|
|||
|---|---|---|---|
|
#18+
JulT, У вас на входе тип как строка. Посмотрите Строитель как замена register. Если вы можете так глубоко и рано делать из строки объекты. Imho ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 14:50 |
|
||
|
Подскажите паттерн
|
|||
|---|---|---|---|
|
#18+
JulTдалее происходит http запрос с передачей этих параметров. Off )) Если нет БЛ, то можно минуя объекты, а используя шаблоны отправить http запрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 14:53 |
|
||
|
Подскажите паттерн
|
|||
|---|---|---|---|
|
#18+
Petro123JulTдалее происходит http запрос с передачей этих параметров. Off )) Если нет БЛ, то можно минуя объекты, а используя шаблоны отправить http запрос. Я же написала выше: "Более того, по типу иногда нужно сходить в базу, получить доп инфу.." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 14:58 |
|
||
|
Подскажите паттерн
|
|||
|---|---|---|---|
|
#18+
JulTЯ же написала выше: "Более того, по типу иногда нужно сходить в базу, получить доп инфу.." Да. Отменяется. Смотрите Вики - строитель. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 15:01 |
|
||
|
Подскажите паттерн
|
|||
|---|---|---|---|
|
#18+
Petro123JulTЯ же написала выше: "Более того, по типу иногда нужно сходить в базу, получить доп инфу.." Да. Отменяется. Смотрите Вики - строитель. Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 16:45 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=57&tid=2122480]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
30ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 300ms |

| 0 / 0 |
