Size: a a a

2020 February 21

AB

Alessio Bratenkov in pro.jvm
контроллеры только на прием и отправку данных
источник

H

Human in pro.jvm
Артем Суслов
Вряд ли кто то мне ответит в пятницу вечером. Но тем не менее. Как думаете насколько корректно располагать часть бизнес логики в контроллерах и джобах с точки зрения хорошего дизайна и тестов? Просто сейчас фреймворки всё берут на себя, не нужно наследоваться от каких то интерфейсов, просто повесил анотацию и вот тебе контроллер или джоба. Или не нужно как то мапить данные в большинтсве случаев. И контроллеры или джобы получаются "пустыми", просто делегируя работу бизнес логике в сервисах(менеджерах, хэндлерах и т.п.).
Смотря что такое бизнес-логика. Имхо этот вопрос улетучивается если понимать SRP и остальные OOD приципы, про направление к стабильности в зависимостях и абстракции
источник

АC

Алексей C in pro.jvm
Артем Суслов
Вряд ли кто то мне ответит в пятницу вечером. Но тем не менее. Как думаете насколько корректно располагать часть бизнес логики в контроллерах и джобах с точки зрения хорошего дизайна и тестов? Просто сейчас фреймворки всё берут на себя, не нужно наследоваться от каких то интерфейсов, просто повесил анотацию и вот тебе контроллер или джоба. Или не нужно как то мапить данные в большинтсве случаев. И контроллеры или джобы получаются "пустыми", просто делегируя работу бизнес логике в сервисах(менеджерах, хэндлерах и т.п.).
источник

H

Human in pro.jvm
Артем Суслов
Вряд ли кто то мне ответит в пятницу вечером. Но тем не менее. Как думаете насколько корректно располагать часть бизнес логики в контроллерах и джобах с точки зрения хорошего дизайна и тестов? Просто сейчас фреймворки всё берут на себя, не нужно наследоваться от каких то интерфейсов, просто повесил анотацию и вот тебе контроллер или джоба. Или не нужно как то мапить данные в большинтсве случаев. И контроллеры или джобы получаются "пустыми", просто делегируя работу бизнес логике в сервисах(менеджерах, хэндлерах и т.п.).
Нужно понимать, что это все про изменения. Если ты напишешь код и не будешь его менять то можно городить все где хочешь
источник

АС

Артем Суслов in pro.jvm
Human
Смотря что такое бизнес-логика. Имхо этот вопрос улетучивается если понимать SRP и остальные OOD приципы, про направление к стабильности в зависимостях и абстракции
Я не хочу класть в контроллеры детали реализации бизнес логики. Но допустим выбрать какой то список по статусам и применить к ним какое то действие. По идее это бизес логика, т.к. только она должна знать что то про статусы сущностей
источник

H

Human in pro.jvm
Также например некоторые запариваются стоит ли вешать spring @Autowired, ибо идет связанность с di спринга, а вдруг захотим поменять di. Тут нет абстрактно правильного ответа, все зависит от кейса и твоего знания о том как может все менятся и будет ли
источник

АС

Артем Суслов in pro.jvm
Да, я в курсе. Но сложно называть контроллеры, например в Spring MVC контроллерами в MVC, т.к. они ничего по сути как контроллеры не делают. Всё делает спринг, по моему.
источник

H

Human in pro.jvm
Артем Суслов
Я не хочу класть в контроллеры детали реализации бизнес логики. Но допустим выбрать какой то список по статусам и применить к ним какое то действие. По идее это бизес логика, т.к. только она должна знать что то про статусы сущностей
"выбрать какой то список по статусам и применить к ним какое то действие" это еще не бизнес логика, хотя может быть и она. Лучше ориентироваться на принципы которые я выше написал, тк "абстрактно лучше" - нет
источник

H

Human in pro.jvm
Артем Суслов
Я не хочу класть в контроллеры детали реализации бизнес логики. Но допустим выбрать какой то список по статусам и применить к ним какое то действие. По идее это бизес логика, т.к. только она должна знать что то про статусы сущностей
Фраза "в контроллерах не должно быть бизнес логики" это очень упрощенный закон для тех кто не разбирается. Если поймешь как к этому пришли - вопросы отпадут
источник

АС

Артем Суслов in pro.jvm
Human
Нужно понимать, что это все про изменения. Если ты напишешь код и не будешь его менять то можно городить все где хочешь
Да, я понимаю что всё дело в конкретном случае и в "предрасположенности" кода к изменениям в будущем. Просто не могу сформировать для себя границы, поэтому и спросил. Но ты прав, нельзя об этом говорить абстрактно
источник

b💬

binka 💬 in pro.jvm
Вопросик по Criteria API. Что будет происходить при передаче в Restrictions.eq значения null?
Будет запросе "поле = null" или заменится на IS NULL или вообще проигнорируется билдером как некорректное?
источник

PK

Pavel K. in pro.jvm
Артем Суслов
Вряд ли кто то мне ответит в пятницу вечером. Но тем не менее. Как думаете насколько корректно располагать часть бизнес логики в контроллерах и джобах с точки зрения хорошего дизайна и тестов? Просто сейчас фреймворки всё берут на себя, не нужно наследоваться от каких то интерфейсов, просто повесил анотацию и вот тебе контроллер или джоба. Или не нужно как то мапить данные в большинтсве случаев. И контроллеры или джобы получаются "пустыми", просто делегируя работу бизнес логике в сервисах(менеджерах, хэндлерах и т.п.).
Контроллеры должны содержать только логику, специфичную для интерфейса. Например, валидацию в терминах интерфейса
источник

H

Human in pro.jvm
Артем Суслов
Да, я понимаю что всё дело в конкретном случае и в "предрасположенности" кода к изменениям в будущем. Просто не могу сформировать для себя границы, поэтому и спросил. Но ты прав, нельзя об этом говорить абстрактно
Мб если у тебя нет ответов то и не стоит заморачиваться, лепи в спринговских контроллерах. Сделай "ленивое" изменение кода, когда понадобится поменять и разделить ты поймешь и поделишь на два модуля)
источник

H

Human in pro.jvm
Иногда скорость разработки важнее чем будущая поддержка, мб этот код вообще нах никому не нужен будет и его выбросят. В старапах всяких это частая тема, пользователям фича не зашла - выбросили, а ты там архитектуру городил и 500 лет думал куда класть в контроллер или бизнес-сервис, хотя мог сразу одну функцию напистаь
источник

АС

Артем Суслов in pro.jvm
Human
Иногда скорость разработки важнее чем будущая поддержка, мб этот код вообще нах никому не нужен будет и его выбросят. В старапах всяких это частая тема, пользователям фича не зашла - выбросили, а ты там архитектуру городил и 500 лет думал куда класть в контроллер или бизнес-сервис, хотя мог сразу одну функцию напистаь
Это вопрос не про конкретный сервис(продукт). А скорее для меня, чтобы выработать некоторые шаблоны разработки и пользоваться ими, потому что они точно дадут мне архитектуру, которая не превратится в непонятную лапшу
источник

АC

Алексей C in pro.jvm
Human
Мб если у тебя нет ответов то и не стоит заморачиваться, лепи в спринговских контроллерах. Сделай "ленивое" изменение кода, когда понадобится поменять и разделить ты поймешь и поделишь на два модуля)
Что значит ленивое изменение?
источник

PK

Pavel K. in pro.jvm
Разделить на Controller (не UI) - BusinessService - DAO, имхо, дело 5 минут. А коллеги потом на костер не поведут
источник

H

Human in pro.jvm
Алексей C
Что значит ленивое изменение?
Такого термина нет, я сам придумал) Я просто к тому что потом можно отрефакторить если выяснится что у функции все таки две причины для изменения а не одна (SRP)
источник

H

Human in pro.jvm
Артем Суслов
Это вопрос не про конкретный сервис(продукт). А скорее для меня, чтобы выработать некоторые шаблоны разработки и пользоваться ими, потому что они точно дадут мне архитектуру, которая не превратится в непонятную лапшу
Сильно заявление. Шаблоны опасная вещь. Я как то на другую работу перешел и стал там такое лепить, а их предметная область вообще на это не ложилась и проблемы были другие и "шаблон" мой не подходил, я понял это только через 2 недели когда все превратилось в лютую дичь
источник

АС

Артем Суслов in pro.jvm
Human
Сильно заявление. Шаблоны опасная вещь. Я как то на другую работу перешел и стал там такое лепить, а их предметная область вообще на это не ложилась и проблемы были другие и "шаблон" мой не подходил, я понял это только через 2 недели когда все превратилось в лютую дичь
🤣 Я понимаю, что шаблоны не всегда работают. И сразу понять как делать невозможно, если только с таким не сталкивался до этого. Но только шаблоны могут дать скорость разработки. А рефакторинг всегда будет нужен.
источник