@oop_ru

Страница 439 из 785
Sergey
25.12.2017
09:08:51
суффикс Exception дабы убрать двусмысленность у имени исключения, но лепить для всего так себе

иногда еще ползуюсь Error суффиксом

Roman
25.12.2017
09:10:00
Выделяете ли вы исключения в отдельную папку? И если не выделяете, используете ли суффикс Exception?
Я выделяю, удобно искать их потом, особенно если делите проект по контекстам

Google
Roman
25.12.2017
09:10:53
Выделяете ли вы исключения в отдельную папку? И если не выделяете, используете ли суффикс Exception?
Не использую суффикс в случае понятности исключения типа как UserNotFound

Sergey
25.12.2017
09:10:56
Я выделяю, удобно искать их потом, особенно если делите проект по контекстам
но у тебя в каждом контексте свои исключения, по факту твои исключения должны лежать в том же модуле который это дело выкидывает, нет? или я не так понял?

Артур Евгеньевич
25.12.2017
09:11:15
А вот про это вопрос кстати:

Maksim
25.12.2017
09:11:21
выделяю и до кучи в отдельную папку в рамках модуля) вкусовщина, как по мне. Ни за, ни против особых моментов нет) ну типа лишние 5 буковок написать не западло и всё такое)

Артур Евгеньевич
25.12.2017
09:13:35
У меня в проекте имеятся некоторая штука, которая позволяет указывать в анотациях метода классы, которые будут вызваны перед вызовом метода. Назыаются условно вотчдоги. Есть папка вотчдоги и в ней папка экспшнов, в которой лежат экспшны для каждой проверки - юзер нот фаун, айпиблокд и т.д Сейчас я делаю задачу, чтобы эти вотчдоги стали обязательными. И вот думаю в каую папку мне закинуть WatchdogNotFound или в папку с исключениями вотчдогов, или в папку сборщика/компилятора сервисов

Артур Евгеньевич
25.12.2017
09:13:49
Я склоняюсь к сборщику, так как это его все таки ошибка, что не указан вотчдог

а сам вотчдог не должен знать обязательный он илнет

Roman
25.12.2017
09:14:55
а сам вотчдог не должен знать обязательный он илнет
Это же не исключения самого вотчера

Артур Евгеньевич
25.12.2017
09:15:21
что-то типа AOP?
получается, что так

Google
Sergey
25.12.2017
09:15:45
Артур Евгеньевич
25.12.2017
09:16:23
я не знаю, я не работал пока на прикладном уровне, просто дали задачу, чтобы для определенного интерфейса нельзя было написатьреализацию без указателя тего вотчера

Max
26.12.2017
17:25:32
А кто тут норм с DDD/микросервисами дружит? Вот например у меня есть форма, которая создает юзера, ее UI понятное дело размазан на несколько контекстов, те в каждом контексте есть своя сущность юзера (для заказов, рекламы, доставки и тп). Вопрос - где лучше создавать эти сущности? Сейчас у меня экшен контроллера, который хендлит форму и потом просто размазывает его на несколько сущностей и сохраняет в бд

и смущает полотно в 300+ строк

в одном методе

есть вариант с коммандами, памапать реквест на комманды и дальше к ним подкидывать обработчики для каждого из контекстов

Sergey
26.12.2017
17:36:40
либо саги либо сервисы-полотнища - суть в том что бы у тебя было что-то одно что описывает процесс

и желательно это что-то должно быть максимально тупым, что бы покрывалось позитивным тест кейсом

Maksim
26.12.2017
17:41:04
в саге будет больше 300 строк) если уж прям размазывать от души)

Sergey
26.12.2017
17:43:22
ну я думаю что саги все ж тут рано))

хотя честно - хз.... я пока плохо понимаю разницу в сложности, как по мне и то и то легко, просто есть нюансы другие

но я пока могу только на простых кейсах прокручивать..

вот как у Макса)

Max
26.12.2017
17:44:12
ее опять ProcessManager ??

я же уже вроде спрашивал)

Aleh
26.12.2017
17:44:28
Sergey
26.12.2017
17:44:44
ну процесс менеджер это когда у тебя процесс со стэйтом который надо держать дольше чем запрос

это как наши с тобой платежки

Google
Maksim
26.12.2017
17:44:55
вот как у Макса)
ну мои саги (которые на работе пилю) ещё попробуй пойми) там довольно большая блок-схема получается)

Maksim
26.12.2017
17:45:14
наркоманская схема, все дела

Sergey
26.12.2017
17:45:25
наркоманская схема, все дела
да норм, я разобрался ж)

Max
26.12.2017
17:45:31
а чем смущает?
как показывает практика, где 300, там через месяц уже 500, плюс с десяток if - else - if

Sergey
26.12.2017
17:45:44
в отдельные сервисы

в VO

куда угодно

Maksim
26.12.2017
17:45:53
ты разобрался в том, как они сами работают) а как в них бизнесс-логика обрабатывается - другой момент)

Sergey
26.12.2017
17:45:58
полотнище должно оставаться линейным

если у тебя много зависимостей - убирай логику

Maksim
26.12.2017
17:46:39
в целом, всё говно в сервисах, а саги типа не при чём) если/то

Sergey
26.12.2017
17:46:59
да, саги форсят разделять лучше... но это не точно)

Maksim
26.12.2017
17:47:24
угу) есть у меня сага, которая по пути инициализирует ещё 3) такое себе удовольствие, если честно)

Max
26.12.2017
17:47:39
саги тут не причем, так как все в рамках одной транзакции

Maksim
26.12.2017
17:47:42
оно работает, но вот за прозрачность схемы не ручаюсь)

а сага - эт не транзакция?)

Max
26.12.2017
17:50:41
Google
Maksim
26.12.2017
17:51:18
отчасти) но да ладно, любителей обмазаться команд басами нет, пойду дальше квартиру убирать)

Sergey
26.12.2017
17:52:52
а сага - эт не транзакция?)
мне больше нравится воспринимать это как процесс состоящий из нескольких логических транзакций... и все это должно приводить к консистентному результату.

ну то бишь да транзакция короч убеди...(

Maksim
26.12.2017
17:53:40
я поэтому выше и написал, что отчасти. Всё от использования зависит, имхо. Тебя никто не заставляет откатывать что-то. Или не бросить на пол пути

сохранив "что получилось"

в +/- большом flow по саге ещё попробуй роллбэк сообрази

в принципе довольно коварный инструмент, который оставляет большой запас для "творчества". И это иногда может стать проблемой)

Roman
26.12.2017
19:33:23
А можно на пальцах про саги?

Ну и если не затруднит - где подробнее прочитать можно? Что это такое и с чем их готовить?

Maksim
26.12.2017
19:39:15
https://docs.particular.net/nservicebus/sagas/

как пример)

Roman
26.12.2017
19:44:39
https://docs.particular.net/nservicebus/sagas/
Типа бизнесовой шины данных что-то, верно?

Maksim
26.12.2017
19:45:06
зависит от реализации. Скорее что-то вроде аркестрации, если такой термин применим

Anton
27.12.2017
07:17:48
Про саги лучше у мелкомягких почитать: https://msdn.microsoft.com/en-us/library/jj591569.aspx

И у Джонатана тоже можно немного мыслишек: http://blog.jonathanoliver.com/cqrs-sagas-with-event-sourcing-part-i-of-ii/

А оттуда по ссылочкам к Уди, Янгу и обмазыванию басами как здесь любят :)

Roman
27.12.2017
07:22:56
А оттуда по ссылочкам к Уди, Янгу и обмазыванию басами как здесь любят :)
Уди Янгом недоволен. Он предлагает доменные ивенты через синглтон паблишить.

А это зашкварище.

Пушо чтобы хэндлеры инстанциировать - надо либо сервис-локатор юзать (что зашквар), либо инстанциировать их ручками - что тоже зашквар.

Ilia
27.12.2017
07:24:13
А это зашкварище.
А ты вообще знаешь, что такое "зашквар"?

Google
Roman
27.12.2017
07:24:40
Как кстати решаете обработку доменных событий

В шину пулять их?

Типа медиатора богартовского

Чтобы он через DI обработчики резолвил

Со всякими сервисами, блэкджеком и прочим.

Ilia
27.12.2017
07:27:24
"херня"
Да нет.

Ты поинтересуйся на досуге...

Roman
27.12.2017
07:27:47
Да нет.
Ну тогда чтобы протестить обработку - надо переопределять регистрации в DI

Хотя...

Их и так надо переопределять)

Просто сервис локатор - такой себе паттерн.

Явное инстанциирование - вообще абсолютное зло.

Bohdan
27.12.2017
07:31:22
Как кстати решаете обработку доменных событий
у меня они идут только от команд а диспетчер сам имеет набор обработчиков (симфони в него инжектит их при сборке контейнера)

Roman
27.12.2017
07:32:22
у меня они идут только от команд а диспетчер сам имеет набор обработчиков (симфони в него инжектит их при сборке контейнера)
Ну то бишь в команду инжектится инстанс диспетчера, в который пуляются события, происходящие в обработчике команды?

Maksim
27.12.2017
07:33:40
шо. опять..)

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