@oop_ru

Страница 546 из 785
Evgeniy
05.03.2018
19:51:40
и проверять тип через instanceof

Bohdan
05.03.2018
19:51:43
типа успешно или нет?

Evgeniy
05.03.2018
19:51:59
вместо !empty($result->getErrors())

Google
Evgeniy
05.03.2018
19:52:18
но имхо тут это не надо

Bohdan
05.03.2018
19:52:23
можно и так но оно все равно оказывается не лучше исключений)

вот в чем петрушка

Evgeniy
05.03.2018
19:52:39
как итог у тебя валидация контракта будет отдельно

в валидаторе

валидатор в идеале возвращает ок или не ок

или ошибки

Bohdan
05.03.2018
19:53:09
размазывание сущности получается

Evgeniy
05.03.2018
19:53:11
ты можешь код в terminate заменить на валидатор

и спросить у валидатора валидно ли

если валидно вызывать приватный метод terminate

и возвращать валидатор

Alan
05.03.2018
19:54:02
я все жду хорошего момента чтоб спросить к чему в итоге пришли ?

Google
Evgeniy
05.03.2018
19:54:03
у которого будет метод $result->hasErrors

и $result->getErrors

Bohdan
05.03.2018
19:54:11
@f3ath все же поясни, что ты имел ввиду

под логикой в результате

есть несколько разных вариантов и они отличаются мелкими деталями реализации

но киллер-фичи для всех сценариев нет

Evgeniy
05.03.2018
19:54:51
сейчас накидаю вариант

Bohdan
05.03.2018
19:55:15
вариант с валидатором мне не очень нравится именно из-за размазанности

то есть правила у меня отдельно, сущность отдельно

но правила - это ведь бизнес-логика

Alan
05.03.2018
19:55:43
ну смотря какие правила

Bohdan
05.03.2018
19:55:51
те, о которых говорим)

проверка связанных сущностей, статусов, полей и тд

совместимости всякие, короче

da horsie
05.03.2018
19:57:43
@f3ath все же поясни, что ты имел ввиду
я имел в виду условные операторы, которые говорять выполнить то или другое в зависимости от результата операции.

Bohdan
05.03.2018
19:58:09
все равно до меня не доходит? можешь какой-то простой пример набросить?

не кодом

чисто логику

Evgeniy
05.03.2018
19:58:38
https://pastebin.com/axB5K9Lt

Google
Bohdan
05.03.2018
19:58:39
я не вижу того, как результат операции должен решать на основании своего (ведь так?) стейта, что делать дальше коду

Evgeniy
05.03.2018
19:58:42
вот еще вариант

только как минус

пришлось методы isStarted и unpaidInvoicesPresent сделать публичными

если выносим во внешний класс проверку

можно проверку оставить в этом классе и возвращать объект добавляя ошибки в массив

сделав метод добавления как в прошлый раз

Bohdan
05.03.2018
20:00:14
но это уже было

Evgeniy
05.03.2018
20:00:26
ога

ну идеального решения нет

я бы брал скорей всего предпоследний

Bohdan
05.03.2018
20:01:19
последний вроде и интересен

Evgeniy
05.03.2018
20:01:30
где методы у контракта скрыты и внутри код проверок

но если он станет сильно разрастаться по проверкам

Bohdan
05.03.2018
20:01:40
но отдельный класс по сути не несет никакой больше пользы, кроме разделения кода

Evgeniy
05.03.2018
20:01:45
их можно вынести во вне

Bohdan
05.03.2018
20:01:54
и он не реюзабелен

Evgeniy
05.03.2018
20:02:08
да его реюзабельность = 0

мне тоже предпоследний вариант нравиться

но могут быть минусы если проверок слишком дофига

Google
Evgeniy
05.03.2018
20:02:56
неудобно их каждый раз скролить эту лапшу

хотя можно refactoring in method применить

и не выносить в отдельный класс

опять же дело вкуса

Bohdan
05.03.2018
20:05:02
да, сложно к чему-то придти

Evgeniy
05.03.2018
20:05:31
предпоследний вариант тебе норм будет, если будут усложнять изменишь потом как надо

хотя это мое имхо

и возмно выкинуть исключение это более правильно и я ничего не смыслю

причем кстате TerminateResult можно реюзать и в других действиях))

он в себе хранит инфу есть ли ошибки и текста ошибок))))

?

da horsie
05.03.2018
20:09:56
все равно до меня не доходит? можешь какой-то простой пример набросить?
не могу выдумать хороший пример. я теперь сомневаюсь, может ли тут быть какая-то логика, которую можно зашить внутри объекта-результата

Evgeniy
05.03.2018
20:11:25
но вообще если объект на выходе не bool а другой объект возвращает

то вот тут надо его возвращать уже будет в случае успеха методом

но это совсем другая история

da horsie
05.03.2018
20:14:06
ну у меня в голове крутились идеи, что например если надо какие-то еще действия совершать как единую транзакцию, их можно было бы как-то зашить в объект результата. ну типа result.notifyAdmins(emailSender)

но это такое

Evgeniy
05.03.2018
20:15:32
а почему их в объект результата

Google
Evgeniy
05.03.2018
20:15:42
а не в методе где его возвращают делать ?

da horsie
05.03.2018
20:15:48
ну и я говорю, что это так себе пример

Evgeniy
05.03.2018
20:16:12
объект результа с продолжением действий у меня было на практики

когда задача завершается фоновая и грубо говоря у нас 3 ситуации

da horsie
05.03.2018
20:16:42
что-то типа result.finalize(some args)

Evgeniy
05.03.2018
20:16:54
успешно, фатально(не успешно), и надо отложить в конец очереди на время

da horsie
05.03.2018
20:16:56
но это слишком некокретно все

забейте, короче)

Evgeniy
05.03.2018
20:17:09
так вот в 3 этих ситуация в зависимости от задачи надо делать разные действия

я такой вопрос решил в объектах результатах

вынес результат в интерфейс и сделал разные объекты

da horsie
05.03.2018
20:17:41
ну во

вполне себе пример

Evgeniy
05.03.2018
20:18:07
я же говорю было в практики но тут чуть сложней

я не ябу какое действие я запускаю в целом

и что оно возвращает)

потому что фоновых тасков у нас довольно много

при этом например время ожидание можно в таске указать типо return new Waiting(60);

da horsie
05.03.2018
20:20:30
угу

f4rt~
05.03.2018
20:20:56
где Waiting { public function __construct($sec) { sleep($sec); }} ?

da horsie
05.03.2018
20:20:58
если результат операции это конкретная штука из доменной области, есть шансы, что туда удобно будет какую-то логику еще засунуть

Страница 546 из 785