Size: a a a

Angular - русскоговорящее сообщество

2020 March 11

S

Smooth Operator in Angular - русскоговорящее сообщество
Vadym K.
в чем подводные камни? Частично это попытка обойти местами циклические зависимости
закон деметры
источник

VK

Vadym K. in Angular - русскоговорящее сообщество
спасибо, прямо в точку
источник

ЭП

Эрик Поуль in Angular - русскоговорящее сообщество
Vadym K.
привет, это нормально если у меня есть компонент, в него подключен сервис АService, а в  него в свою очередь подключен BService, что бы упростить, можно ли в компоненте вызвать метод подобным образом  this.AService.BService.getName()
this.Aservice.BserviceGetNane()
источник

AE

Argument Exception in Angular - русскоговорящее сообщество
Smooth Operator
закон деметры
ничесе, даже не знал что на это есть свой "закон"
источник

VK

Vadym K. in Angular - русскоговорящее сообщество
да вот как раз пытался я обойти лишнюю прослойку в виде методов-адаптеров
источник

VK

Vadym K. in Angular - русскоговорящее сообщество
но это и есть минус этого закона
источник

VK

Vadym K. in Angular - русскоговорящее сообщество
"Недостатки
Недостатком закона Деметры является то, что иногда требуется создание большого количества малых методов-адаптеров (делегатов) для передачи вызовов метода к внутренним компонентам."
источник

ЭП

Эрик Поуль in Angular - русскоговорящее сообщество
Vadym K.
но это и есть минус этого закона
Но это и плюс
источник

S

Smooth Operator in Angular - русскоговорящее сообщество
Vadym K.
да вот как раз пытался я обойти лишнюю прослойку в виде методов-адаптеров
это скорее говорит о плохой архитектуре
источник

S

Smooth Operator in Angular - русскоговорящее сообщество
чем о недостатке этого закона
источник

nt

nur tlek in Angular - русскоговорящее сообщество
shareReplay({refCount: true}) = publishReplay(1) + refCount?
источник

ЭП

Эрик Поуль in Angular - русскоговорящее сообщество
Vadym K.
да вот как раз пытался я обойти лишнюю прослойку в виде методов-адаптеров
А у тебя функция bService получает какие-то параметры? Почему ее не получать на прямую в компоненте, а данные потом передавать в aService? Тем более что тебе походу просто надо получить данные в компоненте из bService
источник

S

Smooth Operator in Angular - русскоговорящее сообщество
nur tlek
shareReplay({refCount: true}) = publishReplay(1) + refCount?
не
источник

nt

nur tlek in Angular - русскоговорящее сообщество
nur tlek
shareReplay({refCount: true}) = publishReplay(1) + refCount?
tak?
источник

Вキ

Вертихвост キバ 🏡🦊... in Angular - русскоговорящее сообщество
nur tlek
shareReplay({refCount: true}) = publishReplay(1) + refCount?
источник

S

Smooth Operator in Angular - русскоговорящее сообщество
не
источник

VK

Vadym K. in Angular - русскоговорящее сообщество
@poulaner там прикол в том что когда разнес всю логику по сервисам, столкнулся с тем что например есть сервис deviceService и сервис devicesService, тобишь в первом логика чисто по одному девайсу, а во втором по колекциям девайсов, и в определенный момент начались траблы с тем что компонентам либо сервисам бывают нужны методы либо с первого либо с первого и второго одноврменно
источник

nt

nur tlek in Angular - русскоговорящее сообщество
источник

nt

nur tlek in Angular - русскоговорящее сообщество
📚 Вопрос: что такое share(), publish(), multicast() в RxJS?
🦊 Заваривайте кофейку, ответ будет длинным. Прежде чем переходить к следующему пункту обязательно разберитесь с предыдущим.


📢 Что такое Subject?
Простыми словами, Subject это телефон. В него можно говорить, и из него можно слушать одновременно.

Есть различные Subject: Subject, ReplaySubject, BehaviorSubject, AsyncSubject.

Это основная база.


🏰 Что такое multicast()?
Оператор multicast() на вход принимает Subject или его фабрику. И передавая в него различные виды Subject можно получить следующие комбинации:
multicast( new Subject() )
multicast( new ReplaySubject() )
multicast( new BehaviorSubject() )

Все это создает нам ConnectableObservable, который позволяет расшарить Subject на несколько потоков. Но у них всех будут разные стратегии работы, в зависимости от переданного Subject.

Если вы все осилили, то дальше будет очень просто.


🍬 Немного сахара
Операторы publish(), publishReplay(), publishBehavior() используют mulicast() с определенным Subject:
publish() === multicast( new Subject() )
publishReplay() === multicast( new ReplaySubject() )
publishBehavior() === multicast( new BehaviorSubject() )

Другими словами это все простой сахар, не забудьте его добавить в только что сваренный кофе.


👨‍🏫 Считаем ссылки
Оператор refCount() реализует паттерн RefCount и автоматически управляет ConnectableObservable:
— если появляется подписчик, то он делает connect;
— если появляется еще один подписчик, то ничего не происходит, используется тот же connect;
— если все подписчики отпишутся, то он сделат unsubscribe от коннекта к ConnectableObservable.


🦄 Финальный босс
Остались операторы share(), shareReplay().
share() === publish() + refCount()
shareReplay({ refCount: true }) === publishReplay() + refCount()

__
❤️ Теперь ты знаешь как это работает, отправь своим коллегам, пусть они тоже узнают.
источник

VK

Vadym K. in Angular - русскоговорящее сообщество
в итоге буду править саму архитектуру
источник