
Maksim
05.03.2018
18:59:44

Evgeniy
05.03.2018
18:59:51
так ты на телефоне лучше напиши)

Bohdan
05.03.2018
19:00:05

Google

Maksim
05.03.2018
19:00:52
формально, с исключениями дела обстоят так же. Тонна всяких типов, все дела. Но оно как-то всё проще смотрится, имхо

Bohdan
05.03.2018
19:01:00
возврат объекта как результата тоже имеет право на жизнь
правда, колво бойлерплейт-кода будет немалым
хотя вопрос очень спорный

Maksim
05.03.2018
19:02:05

Bohdan
05.03.2018
19:02:49
не, я такое люблю, не зря сегодня закидывал ребят во vue.js чятике про перевод слова "props"

Evgeniy
05.03.2018
19:03:21

Bohdan
05.03.2018
19:03:24
в джаве есть разделение на фатал эрроры и исключения?

Evgeniy
05.03.2018
19:03:27
хотя это же js

Maksim
05.03.2018
19:03:28
пойду дальше исключения плодить)

Evgeniy
05.03.2018
19:03:37

Bohdan
05.03.2018
19:03:38

Evgeniy
05.03.2018
19:03:41
и не runtime

Google

Bohdan
05.03.2018
19:03:44
я про аналогию с пхпшными эррорами

Evgeniy
05.03.2018
19:03:59
ну типо может не ловиться если рантайм
чуть чуть отличается
если исключение не runtime ты обязан его ловить
или ничего не соберется

Bohdan
05.03.2018
19:04:30
ага, уловил

Evgeniy
05.03.2018
19:04:32
если исключение runtime то похуй вроде и код соберется
можно ловить все рантаймы в одном месте

da horsie
05.03.2018
19:04:46

Like
05.03.2018
19:04:50
Ничего личного, но ухадите со своей джавой.

Bohdan
05.03.2018
19:05:04

Evgeniy
05.03.2018
19:05:33

Bohdan
05.03.2018
19:05:35
ну тут толстенькие модели
контракт - агрегат для периодов (под каждый из которых ставится инвойс)

Evgeniy
05.03.2018
19:05:45
типо ты такой контракт->закройся()
а он такой пышь, не могу хозяина есть открытые инвойсы
ты типо до закрытия контракта должен проверить ручками инвойсы
и по закрывать их
и только потом закрывать контракт

Bohdan
05.03.2018
19:06:30
инвойсы закрываются не изнутри)

Google

Bohdan
05.03.2018
19:06:40
ну точнее это отдельное действие

Evgeniy
05.03.2018
19:06:42
но если ты забыл закрыть инвойсы то контракт не закрыть
ну ты типо как то так написать должен

da horsie
05.03.2018
19:06:59
думаешь, эта проверка должна быть снаружи?
ну а почему нет? можно что-то типа ActiveUser implements User, StaleUser implements User. у второго есть метод closeContract() у первого - нет. UserRepo.getStaleUsers().map(user => user.closeContract())

Evgeniy
05.03.2018
19:07:45
foreach($contract->getInvoices() as $invoice) {
$invoice->close();
}
$contract->close();

Bohdan
05.03.2018
19:07:55

Evgeniy
05.03.2018
19:07:59
вот в случае чего контракт должен вылетать с исключением
или сделать

Bohdan
05.03.2018
19:08:06
инвойс должен быть оплачен
точнее, если он оплачен - он закрыт
можно так сказать

Evgeniy
05.03.2018
19:08:35
$contract->closeWithInvoice()
и тут уже в начале инвойсы находятся и закрываются потом инвойс
если инвойсы закрыть низя то такого метода может и не быть

Bohdan
05.03.2018
19:09:02
если инвойс не оплачен - мы не можем закрыть контракт
юзер (админ) должен вручную пойти и сказать, что такой-то клиент бабки в кассу занес (ну или инфа об этом придет извне)

Evgeniy
05.03.2018
19:09:03
если инвойс без оплаты низя закрывать
ну тогда логично тут исключение кинуть
потому что по хорошему в интерфейсе не должно быть кнопки у инвойса не оплаченого на закрытие
и то что сейчас происходит это неведома магия или кто то подставил ид инвойса ручками или еше какой странный маловероятный пиздец

Like
05.03.2018
19:10:22

Evgeniy
05.03.2018
19:10:56

Google

Bohdan
05.03.2018
19:11:01
там есть уже нюансы в реализации, лучше не вдаваться
я заказчика не во всех решениях понимаю и не на все решения влиять могу, потому иногда приходится делать, как просят)

Evgeniy
05.03.2018
19:11:04
и чтобы рядом с ним кнопка была закрыть

Bohdan
05.03.2018
19:11:11
смотри

da horsie
05.03.2018
19:12:16
блин только недавно на эту тему видос смотрел
но забыл как называется

Evgeniy
05.03.2018
19:12:40
имхо мне кажется тут надо как раз применить исключение при невозможности закрыть

Bohdan
05.03.2018
19:12:52
варианты:
1. исключение
2. возврат bool
3. возврат класса (по сути, расширенное 2)
4. монады (тоже близко к 2 и 3)

Evgeniy
05.03.2018
19:12:57
так как нам пришла команда закрыть то что нельзя закрывать

Bohdan
05.03.2018
19:12:58
ну и 5. вынести проверку наружу

Like
05.03.2018
19:13:08

Evgeniy
05.03.2018
19:13:08
имхо должно быть 1 и 5
в бэкенде должно быть исключение
а чтобы исключения не вызывались не надо отображать кнопку во фронте на закрытие инвойса

Like
05.03.2018
19:14:35

Evgeniy
05.03.2018
19:14:46
надежно я бы сказал
и не надо ебаться с текстом ошибки для юзверя почему с его действием его послали нахуй
или во фронте сразу писать, для закрытия контракта надо оплатить счета и список счетов показать

Like
05.03.2018
19:15:34

Evgeniy
05.03.2018
19:16:02
хочет выводить ее без отправки в бэк

Bohdan
05.03.2018
19:16:03
фактически все это одно и то же
мы знаем, что там может произойти ошибка (знаем потому, что закрываться контракт может и автоматически по крону)
исключение - мы ловим его в catch
буль - проверяем ифом
объект ответа - проверяем класс или содержимое
монада - хз, я достаточно еще не вник, но в версии с php, как понимаю, близко к объекту ответа
вынести проверку наружу - получаем тупо тот же if и обработку ошибки

Google

Bohdan
05.03.2018
19:16:11
суть остается одной и той же

Evgeniy
05.03.2018
19:16:39
еще раз

da horsie
05.03.2018
19:16:41

Evgeniy
05.03.2018
19:16:50
у тебя есть бэкенд и пользователи (фронтенд и крон)
пользователи не должны закрывать контракты с открытыми инвойсами

Bohdan
05.03.2018
19:17:23
тут с я тобой соглашусь

Evgeniy
05.03.2018
19:17:24
если такое происходит для бэкенда это исключение или ошибка (тут сам решай)

Bohdan
05.03.2018
19:17:27
кнопку спрятать не проблема

Evgeniy
05.03.2018
19:17:36
пользователи должны иметь возможность проверить
контракт на открытые счета
типо /contract/34/invoices?isOpen=true
и перед закрытием проверять
если какой то распиздяй фронтендер или кто то забыл добавить эту проверку
то ничего фатального и неисправимого не произойдет
логер бэкенда залогирует исключение (они же у вас логируются?)
пользователь сообщит об ошибке в трекер (в идеальном случае типо не могу закрыть инвойс такой то)

da horsie
05.03.2018
19:19:49
если это между фронтом и беком, то я бы просто возвращал результат операции "не могу закрыть из-за инвойсов" потому что это вполне себе допустимый случай
это даже ошибкой назвать сложно.
нормальный такой себе workflow

Evgeniy
05.03.2018
19:20:32
ну типо код ответ ошибка (не завершилось успешно) и message

Bohdan
05.03.2018
19:20:42
ненене
смотри