169 похожих чатов

Всем привет) Ситуация такая - в одном модуле есть два

сервиса - один отвечает за отрисовку Ui, во втором определенная логика
далее компоненты слушают сервисы - кидают им евенты и прочее
но есть пару моментов, когда из одного сервиса нужно перекинуть что-то в другой сервис - и наоборот
и при импорте обоих в друг друга - получаю Circular dependency

переносить один сервис в вид стора не вариант - там много слушателей в компонентах - которые что-то отрисовывают при евенте в других компонентах

пилить 3-й сервис? где будут сливаться два сервиса и будут общаться посредством 3-го сервиса?
или можно использовать родительский компонент модуля в качестве буфера между сервисами?
Что еще можно сделать или что из этого оптимальнее - можете подсказать?

41 ответов

32 просмотра

Попробуйте через фабрику и агрегацию. Но, как по мне, лучше что-то прхитектурно поменять

Kozimjon-Vakhobov Автор вопроса
Andrei
Попробуйте через фабрику и агрегацию. Но, как по м...

да, ща сижу пересматриваю - к чему нужен 2й сервис и как можно перевести его в обычный класс

Kozimjon Vakhobov
да, ща сижу пересматриваю - к чему нужен 2й сервис...

Имею ввиду фабрику на провайдер. Один токен инжектит через deeps два сервиса и агрегирует, а второй токен также ...

Kozimjon-Vakhobov Автор вопроса
Andrei
Имею ввиду фабрику на провайдер. Один токен инжект...

фабрику на провайдер - покопаюсь в эту сторону) спасибо

Kozimjon Vakhobov
да, ща сижу пересматриваю - к чему нужен 2й сервис...

Вот такие варианты ещё. private payrollService:PayrollService; constructor(/*private payrollService:PayrollService*/ injector:Injector) { setTimeout(() => this.payrollService = injector.get(PayrollService)); } Но выглядит костыльно. А лучше архитектурно что-то поменять, мне так кажется

Kozimjon-Vakhobov Автор вопроса
Andrei
Вот такие варианты ещё. private payrollService:Pay...

да, архитектурно 😅😅 лично для меня все, что содержит setTimeout - сразу костыль))

Для эвентов можно сделать отдельный глобальный сервис

Kozimjon-Vakhobov Автор вопроса
Sergei Sergeevich
Для эвентов можно сделать отдельный глобальный сер...

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

можно сделать зависимости от абстракции в каждом из сервисов и отдельно один сервис который прокидывается как эти две абстракции

Kozimjon Vakhobov
глобальный сервис 🧐🧐 надо подумать - но задача так...

Ну Event service может иметь только dispatch() и dispatched$, в то время как события могут быть описаны в виде классов внутри фичи. Тогда никакая логика не будет выходить за пределы твоего модуля

Kozimjon-Vakhobov Автор вопроса
Smooth Operator
можно сделать зависимости от абстракции в каждом и...

не до конца понял если честно как бы 3й сервис который содержит ссылки на два остальных сервиса?

Kozimjon-Vakhobov Автор вопроса
Sergei Sergeevich
Ну Event service может иметь только dispatch() и d...

это хорошая идея))) не додумался при 1м совете с глобальным сервисом ща попробую сделать так, спасибо)

Kozimjon Vakhobov
это хорошая идея))) не додумался при 1м совете с г...

Эвент может содержать свой пэйлоад определенный в конструкторе: this.eventService.dispatch(new AuthUserLoggedIn(user));

Kozimjon-Vakhobov Автор вопроса
Sergei Sergeevich
Эвент может содержать свой пэйлоад определенный в ...

тут по-моему надежнее будет в кач-ве 1го аргумента еще передавать константу как имя эвента this.eventService.dispatch('authEvent', new AuthUserLoggedIn(user));

Kozimjon Vakhobov
тут по-моему надежнее будет в кач-ве 1го аргумента...

Зачем если ты уже описал эвент в виде класс AuthUserLoggedIn? Это как события роутера - слушать ты будешь из dispatched$ фильтруя по event instanceof AuthUserLoggedIn

Sergei Sergeevich
Зачем если ты уже описал эвент в виде класс AuthUs...

Имя можно добавить в класс в виде readonly параметра в классе, для логирования например

Kozimjon-Vakhobov Автор вопроса
Sergei Sergeevich
Зачем если ты уже описал эвент в виде класс AuthUs...

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

Sergei Sergeevich
Зачем если ты уже описал эвент в виде класс AuthUs...

Может тогда уже на полиморфизме что-то замутить?

Kozimjon Vakhobov
параноик)) instanceof не очень нравится было пару ...

Так работают некоторые стейт менеджеры и все у них нормально. Можешь посмотреть ngxs как там сделано

Kozimjon-Vakhobov Автор вопроса
Kozimjon-Vakhobov Автор вопроса
Sergei Sergeevich
Так работают некоторые стейт менеджеры и все у них...

не, я тебя понял на том же нативном андроиде библиотека EventBus работает по этому же принципу но там все таки котлин)

Kozimjon-Vakhobov Автор вопроса
冰冷少爷 🍥 ✨ 🇷🇺 🙀
акак андефайнед может быть строкой?

были случаи когда бэк на ноде отправлял и такое)

Kozimjon-Vakhobov Автор вопроса
Andrei
Ну так это уже не js виноват)

но бэк же тоже на js) его писал не я если что

冰冷少爷 🍥 ✨ 🇷🇺 🙀
акак андефайнед может быть строкой?

Может.... если гдето задано преобразование в строку

Kozimjon Vakhobov
но бэк же тоже на js) его писал не я если что

На любом языке можно такого напилить)

Александр
Может.... если гдето задано преобразование в строк...

Я ток один случай знаю, когда андеф является строкой.

Kozimjon-Vakhobov Автор вопроса
Andrei
На любом языке можно такого напилить)

тут просто проект был написан разными фрилансерами - без постоянного ПМ - работало где-то -+30 людей - каждый писал свою часть - получал деньги и сваливал я почти что переписал 80% проекта - свел в какую-то определенную структуру/архитектуру (нейминг/вложенность/зависимости и т.д.) ща осталась самая последняя и самая сложная часть - которая постоянно ломается - и хрен поймешь там кто и зачем делал поэтому тут такие коды попадаются - глаза на лоб лезут на бэке та же хрень - больше 10 как я знаю фрилансов писали - и каждый в своем стиле тут даже ща нет единой модели респонсов 🤦‍♂️

нууу такое

а это неявное приведение

Andrei
а это неявное приведение

делаем проверку на тип и исключаем подобное

冰冷少爷 🍥 ✨ 🇷🇺 🙀
делаем проверку на тип и исключаем подобное

так вопрос то был поднят не "как обойти", а "как такое получается"

Kozimjon Vakhobov
были случаи когда бэк на ноде отправлял и такое)

Такое лучше не игнорить и к бэку идти с проблемами такими)

Oleg Safonov
Такое лучше не игнорить и к бэку идти с проблемами...

Такое вообще нельзя игнорить))) очень грубая ошибка

Kozimjon-Vakhobov Автор вопроса
Oleg Safonov
Такое лучше не игнорить и к бэку идти с проблемами...

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

Kozimjon Vakhobov
не, к бэку сразу шел и требовал исправить...но вме...

Рано или поздно может выстрелить, как уже выше упоминали

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта