powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / как возвращать результат работы метода?
40 сообщений из 40, показаны все 2 страниц
как возвращать результат работы метода?
    #38186277
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Допусти есть некий метод на уровне сервиса, как лучше возвращать результаты его работы?
Сейчас я использую два подхода, они мне оба не нравятся)

1. Если метод выполнился без исключений - возвращаются результаты работы, иначе исключение.


2. Возвращается объект состоящий из самих результатов работы и enum'а.
Например, (myENUM.OK, resultObj), (myENUM.USER_UNDEFINE, null), (myENUM.SERVICE_NOT_AVAILABLE, null).

Как правильно делать? )
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38186282
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соответственно в контроллере делаю switch по enum, либо catch для исключений.
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38186287
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давно уже изобрели RemoteException. Удаленный код должен вызываться точно так же как локальный. Если удаленный код выкинул исключение, то клиент выкидывает RemoteException, с исключением сервиса. Какой смысл конвертировать исключения в статусы?
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38186293
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczДавно уже изобрели RemoteException. Удаленный код должен вызываться точно так же как локальный. Если удаленный код выкинул исключение, то клиент выкидывает RemoteException, с исключением сервиса. Какой смысл конвертировать исключения в статусы?
Я наверно не правильно использовал терминологию) У меня только локальный код. Мой "сервис" просто локальный класс.
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38186296
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmЯ наверно не правильно использовал терминологию) У меня только локальный код. Мой "сервис" просто локальный класс.
Иии... что это меняет?
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38186297
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не улавливаю смысл городить отдельное исключение для каждого возможного варианта, если можно использовать enum или некий флаг.
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38186298
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроме того, что IDE напомнит внести их в блок catch)
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38186302
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще забыл сказать, что речь идет о проверяемых исключениях(те которые от Exception)
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38186317
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmЯ не улавливаю смысл городить отдельное исключение для каждого возможного варианта, если можно использовать enum или некий флаг.
Или городите только те что нужны. Или RuntimeException ваш выбор.
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38186318
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmЯ не улавливаю смысл городить отдельное исключение для каждого возможного варианта, если можно использовать enum или некий флаг.
google -> exception vs return code
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38186328
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
rdmДопусти есть некий метод на уровне сервиса, как лучше возвращать результаты его работы?
Сейчас я использую два подхода, они мне оба не нравятся)

1. Если метод выполнился без исключений - возвращаются результаты работы, иначе исключение.


2. Возвращается объект состоящий из самих результатов работы и enum'а.
Например, (myENUM.OK, resultObj), (myENUM.USER_UNDEFINE, null), (myENUM.SERVICE_NOT_AVAILABLE, null).

Как правильно делать? )rdmСоответственно в контроллере делаю switch по enum, либо catch для исключений.rdmСоответственно в контроллере делаю switch по enum, либо catch для исключений.Просто Вы не умеете готовить этих "кошек".
Обычное дело. Если на каждый чих создавать отдельный класс-исключение ерунда получится.
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38186343
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WGA, по подробнее можно? )
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38186366
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdm, прочитайте про концепцию Either в Scala. Например вот это:
http://www.ibm.com/developerworks/ru/library/j-ft13/

По сути, вы ее вводите. По поводу того, хорошо это или плохо - в Java, скорее, плохо.
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38186391
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
rdmWGA, по подробнее можно? )Я невеликий спец и вряд ли хорошо сформулирую. Но попробую. На правах пятницы )
1) Коды возврата - это плохо. Проверено временем. Enum - практически то же самое, кстати. Если у Вас длинный стектрейс, то это "добро" еще и передавать надо по цепочке. Вспомните, для чего механизм исключений был вообще придуман.

2) Разберитесь в своем бардаке исключений. Если их слишком много - что-то недоработано, где-то они использовались слишком механистически, по шаблону. Checked exceptions - вообще дело тонкое. В смысле супротив RuntimeException и иже с ним. Понимание этого механизма выедает мозг, но стОит того.

Пример.
Одна и та же исключительная ситуация может вылиться как в checked-, так и unchecked-exception. От чего это зависит? По большей части от того, как ты оцениваешь фатальность исключительной ситуации, т.е. если "шеф! все пропало!", то runtime, а если "тут непонятки возникли, может чо еще можно сделать" - тогда checked. Вообще много по этому поводу написано. Вряд ли я смогу лучше )

3) Найдите общность в реакции системы на различные классы исключений. Проще говоря, сведите однотипную обработку исключений в одну точку.

Пример.
Если у вас runtime-исключение, то можно написать один servlet filter, который будет отдавать пользователю ответ "извините, у нас случилась непредвиденная хрень, мы работаем над над ней". Если checked, то типичный сценарий, что в контроллере ты должен принять решение, что с этим делать.

4) Продумайте иерархию классов, чтобы не декларить их все в методах.


-------------------------------------

В общем как-то так.
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38186392
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WGA, мне вообще кажется что исключение нужно использовать там, где их нужно пробрасывать по иерархии вверх, в других случаях флаги.
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38186393
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonidv, ознакомлюсь) да еще и на русском)
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38186401
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Допустим есть выдуманный метод )

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public ... myMethod(int a, int b) {

//какие-нибудь ограничения накладываемые на a и b, которые нельзя проверить через Bean Validate
//

a != 5
b != 3
a+b != 10
a-b != 7
a*2+b*3 !=10

}



и что в подобных случаях делать? 5 исключений?
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38186403
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и допустим метод расположен где-то в гуще, между слоями)
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38186412
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmи что в подобных случаях делать? 5 исключений?
- исключения для кого?
Помнишь синий экран смерти винды? Там много информации было? )))
Т.е. если надо наверху детализация, то либо все 5, либо одно но с текстом сопроводиловкой: "одно из 5 сломалось".
А по коду возврата по другому что-ли?
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38186417
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123rdmи что в подобных случаях делать? 5 исключений?
- исключения для кого?
Помнишь синий экран смерти винды? Там много информации было? )))
Т.е. если надо наверху детализация, то либо все 5, либо одно но с текстом сопроводиловкой: "одно из 5 сломалось".
А по коду возврата по другому что-ли?
Если в гуще, то нет) Но если перед контроллером, то лучше 10 значений enum'a, чем 10 классов исключений) Нет?)
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38186418
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По поводу текста сопровождения. А если интернализация? Маркеры плейсхолдера в гущу добавлять? )
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38186427
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdm,
Всё очень индивидуально.
- исключения надо хорошо документировать, чтобы не были неожиданностью для другого программиста
- иногда неудобно отлаживать приложение в IDE которое спотыкается на них.
- исключения удобны для проброски на самый верх через несколько слоёв.

По поводу текста - приведи пример, что именно тебя мучает).
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38186439
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Either и Option довольно забавно, правда кода получается многовато)
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38186456
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторКакой смысл конвертировать исключения в статусы?
В простых случаях (веб например) исключения можно не обрабатывать - например на сайте показывается ошибка 500, потом система мониторинга оповещает админа, админ разбирается в чем дело со стектрейсами в руках. В сложных случаях это не работает - нельзя выкинуть исключение из 10-часового ETL процесса потому что какой-то второстепенный ресурс недоступен. Приходится конвертить исключения в статусы вида "а еще тут такая ошибка была".
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38186535
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
rdmДопустим есть выдуманный метод )

[src java]
public ... myMethod(int a, int b) {

//какие-нибудь ограничения накладываемые на a и b, которые нельзя проверить через Bean Validate
//
Вообще говоря можно .

Можете взять модель исключений в Bean Validation, если не хотите закладываться на provider-специфичные особенности (см. JSR-303, Appendix C). Но в JavaEE 7 эта штука включена, между прочим.
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38186565
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WGArdmДопустим есть выдуманный метод )

[src java]
public ... myMethod(int a, int b) {

//какие-нибудь ограничения накладываемые на a и b, которые нельзя проверить через Bean Validate
//
Вообще говоря можно .

Можете взять модель исключений в Bean Validation, если не хотите закладываться на provider-специфичные особенности (см. JSR-303, Appendix C). Но в JavaEE 7 эта штука включена, между прочим.
Я говорил про функциональность, которую нельзя проверить Bean Validate. Выражения с a и b только ради примера.
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38186567
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪавторКакой смысл конвертировать исключения в статусы?
В простых случаях (веб например) исключения можно не обрабатывать - например на сайте показывается ошибка 500, потом система мониторинга оповещает админа, админ разбирается в чем дело со стектрейсами в руках. В сложных случаях это не работает - нельзя выкинуть исключение из 10-часового ETL процесса потому что какой-то второстепенный ресурс недоступен. Приходится конвертить исключения в статусы вида "а еще тут такая ошибка была".
Если вы говорите о Error или RuntimeException спору нет, а если проверяемое исключение?
Например пользователь исчерпал лимит чего-нибудь, лучше выдать сообщения, чем 500.
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38186585
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WGArdmДопустим есть выдуманный метод )

[src java]
public ... myMethod(int a, int b) {

//какие-нибудь ограничения накладываемые на a и b, которые нельзя проверить через Bean Validate
//
Вообще говоря можно .

Можете взять модель исключений в Bean Validation, если не хотите закладываться на provider-специфичные особенности (см. JSR-303, Appendix C). Но в JavaEE 7 эта штука включена, между прочим.
очень познавательно, спасибо)
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38186878
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmНапример пользователь исчерпал лимит чего-нибудь, лучше выдать сообщения, чем 500.Типа, ошибки не могут сопровождаться настроенными сообщениями/страницами???

P.S. За выдачу 200-х кодов при ошибках - "повбывав бы".
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38186896
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
rdmЕсли вы говорите о Error или RuntimeException спору нет, а если проверяемое исключение?
Например пользователь исчерпал лимит чего-нибудь, лучше выдать сообщения, чем 500.Так я ж и говорю - Вы не умеете готовить исключения )
Зачем же сразу 500-я??? Допустим у Вас контроллер обычный сервлет. В него заинжектили ссылку на EJB. Дергаете метод, который выкидывает MyValidationException. Ловите исключение в контроллере, принимаете решение что делать, например, перенаправляете на страницу, на которой вежливо объясняете пользователю, что он там исчерпал.

Поймите, что наружу все равно надо передать инфу об исключительной ситуации. Тем или иным способом. Исключения просто поудобнее.
1) Обходите ограничение на единственный возвращаемый объект.
2) Явно декларируете возможную исключительную ситуацию, обязывая ее обработать. Не редкость, что бэк-энд и фронт разрабатывают разные люди.
3) Получаете возможно "перескочить" наверх по цепочке вызовов без необходимости возвращать enum'ы или другие объекты.
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38186913
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WGAПоймите, что наружу все равно надо передать инфу об исключительной ситуации.
ну, если просто сайт. Публичный сайт. То юзверю не выводится. В целях безопасности.
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38186962
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сейчас понимание приходит) А еще мне очень понравился MethodValidate HV, везде понатыкаю его.
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38186968
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
Petro123WGAПоймите, что наружу все равно надо передать инфу об исключительной ситуации.
ну, если просто сайт. Публичный сайт. То юзверю не выводится. В целях безопасности.Конечно, я упрощаю.
rdmСейчас понимание приходит) А еще мне очень понравился MethodValidate HV, везде понатыкаю его.Не надо "втыкать" повсюду ) Достаточно создать один класс-интерцептор (если используете EJB) или один аспект, если Spring. Method Validation и задумывалось с таким расчетом.
Проверяем описание класса и если задекларирован специальный класс-исключение (или его потомок), то выбрасываем такое исключение. Если же нет - выбрасываем RuntimeException, у которого cause = заданному исключению. Надеюсь понятно объяснил.
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38186985
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WGA, я понял из прочитанного(для Spring), что вещается интерцептор, которые проверяет сначала параметры вызова, затем выполняет тело метода и потом проверяет результат работы метода. Если в одна из двух проверок "проваливается" генерируется исключение(для меня не понятно почему оно не проверяемое) со списком значений, в которых собственно и содержится информация о причинах возникновения.
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38186986
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И интерцепторы вещаются на методы классов отмеченные аннотацией@Validated, за это отвечает bean ...PostProcessor, который при создании бинов, просматривает их на наличии аннотации @Validated и если она присутствует - вещает интерцепторы.)
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38186999
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
rdmWGA, я понял из прочитанного(для Spring), что вещается интерцептор, которые проверяет сначала параметры вызова, затем выполняет тело метода и потом проверяет результат работы метода. Если в одна из двух проверок "проваливается" генерируется исключение(для меня не понятно почему оно не проверяемое) со списком значений, в которых собственно и содержится информация о причинах возникновения.В Spring не юзал, не скажу. Непроверяемое - потому что в общем случае интерцептор не может выбрасывать исключение, которое не объявлено обернутым методом. Иначе получишь не совсем то, что ожидал )
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38187005
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WGArdmWGA, я понял из прочитанного(для Spring), что вещается интерцептор, которые проверяет сначала параметры вызова, затем выполняет тело метода и потом проверяет результат работы метода. Если в одна из двух проверок "проваливается" генерируется исключение(для меня не понятно почему оно не проверяемое) со списком значений, в которых собственно и содержится информация о причинах возникновения.В Spring не юзал, не скажу. Непроверяемое - потому что в общем случае интерцептор не может выбрасывать исключение, которое не объявлено обернутым методом. Иначе получишь не совсем то, что ожидал )
Это ограничение Java? Если так, то это логично. Точнее сказать, иначе нельзя. Я с AOP и Reflection особо не разбирался.
Я вижу минус в том, что IDE не заставит их обработать, т.е. вполне можно забыть обернуть вызов метода в блок try catch )
Там исключение по сути одно - MethodConstraintViolationException.
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38192213
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
rdmЯ вижу минус в том, что IDE не заставит их обработать, т.е. вполне можно забыть обернуть вызов метода в блок try catch )Можно подумать оно помешает не обрабатывать их в других случаях...

Из примеров когда заставит не просто среда, а компилятор - декораторы в EJB (точнее в CDI). Там рулит type-safe...
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38192399
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WGArdmЯ вижу минус в том, что IDE не заставит их обработать, т.е. вполне можно забыть обернуть вызов метода в блок try catch )Можно подумать оно помешает не обрабатывать их в других случаях...

Из примеров когда заставит не просто среда, а компилятор - декораторы в EJB (точнее в CDI). Там рулит type-safe...
Подробнее можно? )
...
Рейтинг: 0 / 0
как возвращать результат работы метода?
    #38192774
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
rdmWGAпропущено...
Можно подумать оно помешает не обрабатывать их в других случаях...

Из примеров когда заставит не просто среда, а компилятор - декораторы в EJB (точнее в CDI). Там рулит type-safe...
Подробнее можно? ) Можно .
...
Рейтинг: 0 / 0
40 сообщений из 40, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / как возвращать результат работы метода?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]