Size: a a a

2020 March 08

AS

Artem Sierikov in Java & Co
Bekhruz Sharipov
наверное самый простой и тупой способ добавить поле type типа String и дергать из дб по этому полю(через метод сервиса, например getByType)
Да, уже добавил, только Enum, спасибо

Теперь вопрос следующий: нужно создавать объект типа type, где type передается в @PathVar и конвертируется сразу в EmployeeType.  Есть ли способ создавать нужный подтип без использования  switch? Просто с ним придется каждый раз, как мы добавляем новый подтип, переписывать этот "маппинг", добавляя в switch новый тип.
источник

C

Cyclone in Java & Co
Artem Sierikov
Да, уже добавил, только Enum, спасибо

Теперь вопрос следующий: нужно создавать объект типа type, где type передается в @PathVar и конвертируется сразу в EmployeeType.  Есть ли способ создавать нужный подтип без использования  switch? Просто с ним придется каждый раз, как мы добавляем новый подтип, переписывать этот "маппинг", добавляя в switch новый тип.
Замени switch на strategy pattern и всё остальное получится само собой.
источник

C

Cyclone in Java & Co
В контроллере будешь выбирать реализацию абстракции по енуму, и добавлять кейсы или какие-либо другие условия не придётся.
источник

BS

Bekhruz Sharipov in Java & Co
Artem Sierikov
Да, уже добавил, только Enum, спасибо

Теперь вопрос следующий: нужно создавать объект типа type, где type передается в @PathVar и конвертируется сразу в EmployeeType.  Есть ли способ создавать нужный подтип без использования  switch? Просто с ним придется каждый раз, как мы добавляем новый подтип, переписывать этот "маппинг", добавляя в switch новый тип.
Мне кажется енам плохой выбор, при добавлении нового подтипа, придётся добавлять новое значение в енам, ну и бесконечно растущий свич, можешь завести в абстракном классе Employee абстрактный метод getType
источник

B

Bogdan in Java & Co
Artem Sierikov
Привет

Контекст:
Делаю Rest на Spring Boot.
Структура такова, что есть абстрактный Employee от которого наследуется условные Programmer и Manager.

Прочел, что лучше всего сделать такой endpoint :

test.com/employee?type='Manager'

Который вернёт всех Employee типа Manager.

Как лучше организовать передачу типа? Хочу сделать так чтобы можно было масштабировать систему типов ничего не меняя в контроллере Employee, а лишь добавить класс, который его наследует.
наследовние не нужно, просто заведи Enum

чем твой емплоер от менеджера будет отличатся помимо имени класса?
источник

B

Bogdan in Java & Co
Artem Sierikov
Привет

Контекст:
Делаю Rest на Spring Boot.
Структура такова, что есть абстрактный Employee от которого наследуется условные Programmer и Manager.

Прочел, что лучше всего сделать такой endpoint :

test.com/employee?type='Manager'

Который вернёт всех Employee типа Manager.

Как лучше организовать передачу типа? Хочу сделать так чтобы можно было масштабировать систему типов ничего не меняя в контроллере Employee, а лишь добавить класс, который его наследует.
» Хочу сделать так чтобы можно было масштабировать систему типов ничего не меняя в контроллере Employee

https://gameprogrammingpatterns.com/type-object.html
источник

AS

Artem Sierikov in Java & Co
Bekhruz Sharipov
Мне кажется енам плохой выбор, при добавлении нового подтипа, придётся добавлять новое значение в енам, ну и бесконечно растущий свич, можешь завести в абстракном классе Employee абстрактный метод getType
Оно так и работает - каждый подтип возвращает свой тип, который берет из enum
я создал enum чтобы переиспользовать конкретные типы Employee где-то еще, если понадобится

Во со свичем и проблема
источник

AS

Artem Sierikov in Java & Co
Bogdan
наследовние не нужно, просто заведи Enum

чем твой емплоер от менеджера будет отличатся помимо имени класса?
Расчетом зарплаты, методами

В будущем много чем может(правами доступа и тд)
источник

B

Bogdan in Java & Co
Artem Sierikov
Расчетом зарплаты, методами

В будущем много чем может(правами доступа и тд)
ну так разыне стартегии для них реалзиовать


сами классы данных не должны в себе логику содержать, иначе там черт ногу сломит
источник

B

Bogdan in Java & Co
а зарплата это просто читсловое поле


или там от разных показателей эффектвиности работы надбавку автоматом надо считать?
источник

B

Bogdan in Java & Co
источник

AS

Artem Sierikov in Java & Co
Bogdan
ну так разыне стартегии для них реалзиовать


сами классы данных не должны в себе логику содержать, иначе там черт ногу сломит
А расчет значений, которые лежат только в этом классе и относятся только к нему.

Да, вот как раз, то что ты последним написал

И в будущем может потребоваться различно считать некоторые значения

Выносить их в отдельную логику - только засорять файлами дерево
источник

B

Bogdan in Java & Co
Artem Sierikov
А расчет значений, которые лежат только в этом классе и относятся только к нему.

Да, вот как раз, то что ты последним написал

И в будущем может потребоваться различно считать некоторые значения

Выносить их в отдельную логику - только засорять файлами дерево
если у тебя все будет в методах этих сущностей, то классы разростуться до жути
источник

AS

Artem Sierikov in Java & Co
Bogdan
если у тебя все будет в методах этих сущностей, то классы разростуться до жути
Ну что значит все?
То, что к ним не относится или то, что их использует будет естественно в других местах
источник

B

Bogdan in Java & Co
плюс и права доступа и зарплата — все в одном классе это такое
источник

AS

Artem Sierikov in Java & Co
Bogdan
плюс и права доступа и зарплата — все в одном классе это такое
Ну
у пользователя
есть права доступа - допустим как в юниксе - строка
есть какой-то контракт - тип контракт
имя
фамилия
и тд
И методы аля getFullName, которое собирает имя + фамилия
Для такого это самое подходящее место, ну я так думаю
Как иначе?
источник

BS

Bekhruz Sharipov in Java & Co
Наверное, если у тебя подклассы обозначают определённые профессии/должности, то можно уйти от наследования к композиции или аггрегации
источник

AS

Artem Sierikov in Java & Co
Bekhruz Sharipov
Наверное, если у тебя подклассы обозначают определённые профессии/должности, то можно уйти от наследования к композиции или аггрегации
Да, но куда вынести один и тот же код, тот же метод взятия полного имени

Понятно, что тот же контракт будет с композицией или права
источник

BS

Bekhruz Sharipov in Java & Co
В employee, у всех же есть имя и фамилия
источник

AS

Artem Sierikov in Java & Co
Bekhruz Sharipov
В employee, у всех же есть имя и фамилия
В абстракный родитель?
источник