Size: a a a

2020 February 19

VS

Vitaly Sirotkin in Java & Co
Ну вынести этот сервис в несколько сервисов
источник

C

Cyclone in Java & Co
Первый вариант - это вынести логику в сам enum (как у дядь):
enum ЕнумТип {
abstract void делайТоЧтоНужно();
ТИП1 {
какойтоБизнесСервис.делайТо();
},
ТИП2 {
какойтоБизнесСервис.делайСё();
}
}

И вызывать в МоёмТупойКлассе уже без switch:
МойТупойКласс {
void метод(ЕнумТип енумТип) {
енумТип.делайТоЧтоНужно();
}
}

Классно, только откуда в ЕнумТип'е взять КакойтоБизнесСервис? В енумы без костылей за вайрится.
источник

VS

Vitaly Sirotkin in Java & Co
Cyclone
Первый вариант - это вынести логику в сам enum (как у дядь):
enum ЕнумТип {
abstract void делайТоЧтоНужно();
ТИП1 {
какойтоБизнесСервис.делайТо();
},
ТИП2 {
какойтоБизнесСервис.делайСё();
}
}

И вызывать в МоёмТупойКлассе уже без switch:
МойТупойКласс {
void метод(ЕнумТип енумТип) {
енумТип.делайТоЧтоНужно();
}
}

Классно, только откуда в ЕнумТип'е взять КакойтоБизнесСервис? В енумы без костылей за вайрится.
Так себе варик) енам это про перечисления, а не про логику
источник

C

Cyclone in Java & Co
Vitaly Sirotkin
Так себе варик) енам это про перечисления, а не про логику
О том и речь, что я бы вынес логику в туда-куда-обычно-выносят-логику, только как это заинджектить в енум?
источник

VS

Vitaly Sirotkin in Java & Co
Да заинжектить не проблема, вопрос то не в этом. Это просто совсем уебищный вариант с точки зрения размазывания логики
источник

C

Cyclone in Java & Co
Ну и другой вариант, как я писал выше - создать сервис под каждый ЕнумТип и в МойТупойКласс инджектить мапу<ЕнумТип, ЭтотМойНовыйСервис> - и вот это мне не понавилось тем, что я просто создаю ЭтотМойНовыйСервис под каждый ЕнумТип.
Будет ЭтотМойНовыйСервисЕнумТип1, ЭтотМойНовыйСервисЕнумТип2 и т.д.
источник

VS

Vitaly Sirotkin in Java & Co
Cyclone
Ну и другой вариант, как я писал выше - создать сервис под каждый ЕнумТип и в МойТупойКласс инджектить мапу<ЕнумТип, ЭтотМойНовыйСервис> - и вот это мне не понавилось тем, что я просто создаю ЭтотМойНовыйСервис под каждый ЕнумТип.
Будет ЭтотМойНовыйСервисЕнумТип1, ЭтотМойНовыйСервисЕнумТип2 и т.д.
Ну а что такого в таких названиях сервисов?
источник

VS

Vitaly Sirotkin in Java & Co
Это один хрен лучше чем свич)
источник

C

Cyclone in Java & Co
По сути дублирование логики.
источник

C

Cyclone in Java & Co
То есть где всё про Тип1? В ЕнумТипе и ешё в ЭтотМойНовыйСервисЕнумТип1.
А как нам переименовать Тип1 в ТипZ? Переименуй элемент в ЕнумТипе и ещё переименуй ЭтотМойНовыйСервисЕнумТип1. Тоже чё-т не нравится.

Кода дофига, логика размазалась по двум классам вместо одного.
источник

C

Cyclone in Java & Co
Соотношение типов в енуме к имплементаций сервиса один к одному, так нафига при соотношении один к одному две отдельные сущности?
А как объединить в одну, непонятно.
источник

VS

Vitaly Sirotkin in Java & Co
Ну запихни логику в енум, посмотрим что на это скажут твои тимлиды))
источник

C

Cyclone in Java & Co
сам себе тимлид
источник

РН

Роман Нагаев in Java & Co
Cyclone
То есть где всё про Тип1? В ЕнумТипе и ешё в ЭтотМойНовыйСервисЕнумТип1.
А как нам переименовать Тип1 в ТипZ? Переименуй элемент в ЕнумТипе и ещё переименуй ЭтотМойНовыйСервисЕнумТип1. Тоже чё-т не нравится.

Кода дофига, логика размазалась по двум классам вместо одного.
выглядит как повод заюзать стратегию
источник

C

Cyclone in Java & Co
Роман Нагаев
выглядит как повод заюзать стратегию
Так это оно и есть, только мне не нравится размазывание / дублирование, как я написал выше.
источник

РН

Роман Нагаев in Java & Co
Cyclone
Так это оно и есть, только мне не нравится размазывание / дублирование, как я написал выше.
switch case нужно вынести из бизнес сервиса, но не в енам, а что-то типо strategyProvider, оно будет принимать значение енама и возвращать нужную стратегию
источник

РН

Роман Нагаев in Java & Co
бизнес сервис - действие без способа реализации
стратегия - способ реализации
провайдер стратегии - выбор способа реализации для действия (не уверен что эта штука так называется)
источник

C

Cyclone in Java & Co
Вот хз, ребят, вроде сделал, как у лучших собаководов, только
было:
в одном классе свитч на 19 строчек из 3 элементов

стало:
код вызова сократился до 6 строк, без свитча;
добавился код по составлении мапы<енум, реализация> ~ 5 строк;
добавился 1 новый интерфейс и 3 новых класса-реализаций общим количеством 120+ строк.

Стало ли это всё проще? Мне кажется, что нет.
источник

B

Bogdan in Java & Co
Roman K
А на новом месте работы я ковыряюсь в коде, который писал большой любитель акки и рефлекшена. И его где-то 19 мегабайт.
Кода?😳😳😳😳
источник

RK

Roman K in Java & Co
Да
источник