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

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

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

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

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

41 ответов

11 просмотров

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

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
не, к бэку сразу шел и требовал исправить...но вме...

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

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

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

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
Вопрос я правильно понимаю что в коде newtype ArrowMap k v = ArrowMap { getArrowMap :: k -> Maybe v } getArrowMap есть функция типа k -> Maybe v, если да, то не понимаю задач...
Fedor
64
Как Вы считаете нормально ли в двадцатых годах 21 века в ВУЗах Российской Федерации обучать студентов работе с TASM? Не слишком ли это "архаично"? (Если оффтоп или флейм для э...
Spiker01
52
Делаю велосипед логгер. К сообщению хочу прикрутить некоторую информацию, типа, кем отправлено, какой уровень, и всякое такое. И тут подумалось мне, почему бы не хранить весь...
Serjone
8
Народ всем привет Подскажите, как включить самописные dll библиотеки в итоговую сборку Сейчас при запуске dev сервера локально формируется папка build, из которой запускается...
Андрей
4
Доброе утро! Не совсем понятно как установить счетчик яндекс метрики на сайт. И потом ещё цели проставить?
Евгения
18
Продолжая диалог про свифт в проде – сейчас возник вопрос в активном наборе бекендеров. В основном в нашей компании мы фанаты Java Spring и полностью ей довольны. Однако найм ...
Guseyn
27
Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И еще уточнение: finalization юнита наступает раньше или позже OnDestroy?
Ed Doc
48
Гуру, подскажите, меня уже критиковали за неумением, но и в инете я решения не нашел, тем более в доках абракадабры. В 12.1 студии появился новый тип TSQLTimeStampOffset , ест...
Delphi Photo
10
Это фейк @cruppto_newbot?
Antskup
10
Карта сайта