Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / как возвращать результат работы метода? / 25 сообщений из 40, страница 1 из 2
15.03.2013, 20:28:49
    #38186277
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как возвращать результат работы метода?
Допусти есть некий метод на уровне сервиса, как лучше возвращать результаты его работы?
Сейчас я использую два подхода, они мне оба не нравятся)

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


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

Как правильно делать? )
...
Рейтинг: 0 / 0
15.03.2013, 20:31:17
    #38186282
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как возвращать результат работы метода?
Соответственно в контроллере делаю switch по enum, либо catch для исключений.
...
Рейтинг: 0 / 0
15.03.2013, 20:35:51
    #38186287
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как возвращать результат работы метода?
Давно уже изобрели RemoteException. Удаленный код должен вызываться точно так же как локальный. Если удаленный код выкинул исключение, то клиент выкидывает RemoteException, с исключением сервиса. Какой смысл конвертировать исключения в статусы?
...
Рейтинг: 0 / 0
15.03.2013, 20:38:32
    #38186293
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как возвращать результат работы метода?
BlazkowiczДавно уже изобрели RemoteException. Удаленный код должен вызываться точно так же как локальный. Если удаленный код выкинул исключение, то клиент выкидывает RemoteException, с исключением сервиса. Какой смысл конвертировать исключения в статусы?
Я наверно не правильно использовал терминологию) У меня только локальный код. Мой "сервис" просто локальный класс.
...
Рейтинг: 0 / 0
15.03.2013, 20:39:35
    #38186296
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как возвращать результат работы метода?
rdmЯ наверно не правильно использовал терминологию) У меня только локальный код. Мой "сервис" просто локальный класс.
Иии... что это меняет?
...
Рейтинг: 0 / 0
15.03.2013, 20:39:43
    #38186297
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как возвращать результат работы метода?
Я не улавливаю смысл городить отдельное исключение для каждого возможного варианта, если можно использовать enum или некий флаг.
...
Рейтинг: 0 / 0
15.03.2013, 20:41:10
    #38186298
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как возвращать результат работы метода?
Кроме того, что IDE напомнит внести их в блок catch)
...
Рейтинг: 0 / 0
15.03.2013, 20:42:35
    #38186302
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как возвращать результат работы метода?
И еще забыл сказать, что речь идет о проверяемых исключениях(те которые от Exception)
...
Рейтинг: 0 / 0
15.03.2013, 20:49:58
    #38186317
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как возвращать результат работы метода?
rdmЯ не улавливаю смысл городить отдельное исключение для каждого возможного варианта, если можно использовать enum или некий флаг.
Или городите только те что нужны. Или RuntimeException ваш выбор.
...
Рейтинг: 0 / 0
15.03.2013, 20:50:28
    #38186318
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как возвращать результат работы метода?
rdmЯ не улавливаю смысл городить отдельное исключение для каждого возможного варианта, если можно использовать enum или некий флаг.
google -> exception vs return code
...
Рейтинг: 0 / 0
15.03.2013, 20:57:33
    #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
15.03.2013, 21:18:59
    #38186343
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как возвращать результат работы метода?
WGA, по подробнее можно? )
...
Рейтинг: 0 / 0
15.03.2013, 21:57:44
    #38186366
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как возвращать результат работы метода?
rdm, прочитайте про концепцию Either в Scala. Например вот это:
http://www.ibm.com/developerworks/ru/library/j-ft13/

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

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

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

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

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

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


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

В общем как-то так.
...
Рейтинг: 0 / 0
15.03.2013, 23:04:20
    #38186392
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как возвращать результат работы метода?
WGA, мне вообще кажется что исключение нужно использовать там, где их нужно пробрасывать по иерархии вверх, в других случаях флаги.
...
Рейтинг: 0 / 0
15.03.2013, 23:04:47
    #38186393
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как возвращать результат работы метода?
Leonidv, ознакомлюсь) да еще и на русском)
...
Рейтинг: 0 / 0
15.03.2013, 23:15:33
    #38186401
rdm
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
15.03.2013, 23:18:38
    #38186403
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как возвращать результат работы метода?
и допустим метод расположен где-то в гуще, между слоями)
...
Рейтинг: 0 / 0
15.03.2013, 23:35:20
    #38186412
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как возвращать результат работы метода?
rdmи что в подобных случаях делать? 5 исключений?
- исключения для кого?
Помнишь синий экран смерти винды? Там много информации было? )))
Т.е. если надо наверху детализация, то либо все 5, либо одно но с текстом сопроводиловкой: "одно из 5 сломалось".
А по коду возврата по другому что-ли?
...
Рейтинг: 0 / 0
15.03.2013, 23:37:27
    #38186417
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как возвращать результат работы метода?
Petro123rdmи что в подобных случаях делать? 5 исключений?
- исключения для кого?
Помнишь синий экран смерти винды? Там много информации было? )))
Т.е. если надо наверху детализация, то либо все 5, либо одно но с текстом сопроводиловкой: "одно из 5 сломалось".
А по коду возврата по другому что-ли?
Если в гуще, то нет) Но если перед контроллером, то лучше 10 значений enum'a, чем 10 классов исключений) Нет?)
...
Рейтинг: 0 / 0
15.03.2013, 23:39:12
    #38186418
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как возвращать результат работы метода?
По поводу текста сопровождения. А если интернализация? Маркеры плейсхолдера в гущу добавлять? )
...
Рейтинг: 0 / 0
15.03.2013, 23:52:24
    #38186427
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как возвращать результат работы метода?
rdm,
Всё очень индивидуально.
- исключения надо хорошо документировать, чтобы не были неожиданностью для другого программиста
- иногда неудобно отлаживать приложение в IDE которое спотыкается на них.
- исключения удобны для проброски на самый верх через несколько слоёв.

По поводу текста - приведи пример, что именно тебя мучает).
...
Рейтинг: 0 / 0
16.03.2013, 00:17:38
    #38186439
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как возвращать результат работы метода?
Either и Option довольно забавно, правда кода получается многовато)
...
Рейтинг: 0 / 0
16.03.2013, 01:21:22
    #38186456
Йуный джавистЪ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как возвращать результат работы метода?
авторКакой смысл конвертировать исключения в статусы?
В простых случаях (веб например) исключения можно не обрабатывать - например на сайте показывается ошибка 500, потом система мониторинга оповещает админа, админ разбирается в чем дело со стектрейсами в руках. В сложных случаях это не работает - нельзя выкинуть исключение из 10-часового ETL процесса потому что какой-то второстепенный ресурс недоступен. Приходится конвертить исключения в статусы вида "а еще тут такая ошибка была".
...
Рейтинг: 0 / 0
16.03.2013, 09:10:25
    #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
Форумы / Java [игнор отключен] [закрыт для гостей] / как возвращать результат работы метода? / 25 сообщений из 40, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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