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

Всем привет! Продолжаю мучать facade) Вопрос, на сколько правильно

использовать facade для общения между компонентами? К примеру если надо из одно компонента перекинуть объект-параметр в другой, сделать это путём добавления нужного поля в state в заполнить его в одном компоненте, и считать в другом?

96 ответов

31 просмотр

че за фасаде то?

Почему нельзя для общения между компонентами использовать обычный сервис?

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

компоненты диктуют правила игры стору через абстракциию.

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

Viktor-Novikov Автор вопроса
xxtux Shvets
че за фасаде то?

pattern https://balramchavan.medium.com/best-practices-building-angular-services-using-facade-design-pattern-for-complex-systems-d8c516cb95eb

Viktor Novikov
pattern https://balramchavan.medium.com/best-pract...

причем тут вообще паттерн фасад и передача данных каких-то

Viktor-Novikov Автор вопроса
Viktor Novikov
pattern https://balramchavan.medium.com/best-pract...

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

Viktor Novikov
pattern https://balramchavan.medium.com/best-pract...

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

Viktor Novikov
ждём тогда ссылки на правильные статьи)

я сейчас прячу стейт за абстракцией и в компоненте работаю с ней. Основные методы getData updateData

Viktor Novikov
ждём тогда ссылки на правильные статьи)

у меня нет ссылок на статьи, лучше чистый код прочесть сначала и сами паттерны изучить. Чтобы понимать ДЛЯ ЧЕГО что-то делается, а не повторять бездумно

Viktor Novikov
pattern https://balramchavan.medium.com/best-pract...

объясняю чем плохо: у вас AuthService в вашем фасаде лишний, тк он используется только на гвардах... там в гварде он и инжектится, купируя его распространение в приложении OrderList или DashBoard (как и остальные) — конкретные компоненты, они тоже не должны гулять по приложению

Viktor-Novikov Автор вопроса
xxtux Shvets
у меня нет ссылок на статьи, лучше чистый код проч...

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

Viktor Novikov
слушай, если мне надо будет поинтересоваться, что ...

ок, продолжай учиться по плохим статьям, меньше конкуренция

Viktor-Novikov Автор вопроса
🇰🇿 ангулярный чел 🇰🇿
Почему нельзя для общения между компонентами испол...

можно, просто интересно было узнать можно ли для этого использовать фасад и стейт)

Viktor-Novikov Автор вопроса
Viktor Novikov
спасибо

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

Viktor-Novikov Автор вопроса
Максим Федоров
вы сделали фасад над всем приложением это плохо п...

нет, у меня не так на самом деле, сейчас напишу подробнее

а компоненты smart?

Viktor-Novikov Автор вопроса
Евгений Гений
по хорошему фасад это класс который агрегирует бол...

у меня всё проще на самом деле, не как в статье, я просто прикрутил detail-facade к detail-view(там create и update)+ state в которую я сохраняю все изменения с entity, но из list-view есть передача параметра selected entity в тот же самый detail-view

Viktor Novikov
у меня всё проще на самом деле, не как в статье, я...

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

Viktor Novikov
smart

вот посмотри как я делаю. будут вопросы пиши. https://github.com/evoytenkoapps/angular-best-practices/blob/master/examples/src/app/redux-store-ngxs/_services/facade/facade/animal.facade.ts#L8

Viktor Novikov
smart

посмотри как я в компоненте использую. так же делай, только в smart. в dumb его не должно быть.

Евгений Гений
а компоненты smart?

Коротко можете сказать что это за Смарт?

Viktor-Novikov Автор вопроса
Евгений Гений
вот посмотри как я делаю. будут вопросы пиши. http...

спасибо большое, я как раз пример искал хороший)

Максим Федоров
Коротко можете сказать что это за Смарт?

https://github.com/evoytenkoapps/angular-best-practices#%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0

Viktor Novikov
спасибо большое, я как раз пример искал хороший)

ключевое тут. ты провайдишь абстракцию на любую реализацию, хоть сервисы, хоть стору, хоть firebase. короче широкую на широкую)https://github.com/evoytenkoapps/angular-best-practices/blob/master/examples/src/app/redux-store-ngxs/_providers/animal-facde.provider.ts

Евгений Гений
https://github.com/evoytenkoapps/angular-best-prac...

А для чего это? Какие задачи решаются?

Максим Федоров
А для чего это? Какие задачи решаются?

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

Viktor Novikov
спасибо большое, я как раз пример искал хороший)

а вот компонент инжектит в себя абстракцию, найдешь в нем импорт сторы? https://github.com/evoytenkoapps/angular-best-practices/blob/master/examples/src/app/redux-store-ngxs/_components/_smart/animal/animal.component.ts#L17

Viktor-Novikov Автор вопроса
Евгений Гений
ключевое тут. ты провайдишь абстракцию на любую ре...

не совсем понятно, если честно. у меня есть для работы с источниками данных - разные сервисы, которые уже реализуют интерфейсы. Из того что я читал и видел в примерах, я понял, что facade+state - это доп. слой, т.е. в стейте уже агрегируются данные под конкретный компонент в стейте компонента могут быть, данные из разных сервисов к примеру сущности и данные из справочников. а фасад служит для загрузки данных в стейт и сохранения изменений из компонента... сложность наверное ещё для меня в том, что большинство примеров с ngxs, а я пытаюсь сделать без него...

Viktor Novikov
не совсем понятно, если честно. у меня есть для ра...

ну да верно. правильней мою реализацию назвать сервисом. вы мне скажите у вас компоненты импортируют state, стору или как там её, стейт менеджер короче?

Viktor Novikov
не совсем понятно, если честно. у меня есть для ра...

можно данные грузить из фасада, можно из эффектов сторы как делает большенство , как лучше сам не знаю)

Максим Федоров
вы сделали фасад над всем приложением это плохо п...

Такой фасад тоже плохо делать?https://github.com/onehungrymind/fem-production-angular/blob/04.0-facades/libs/core-state/src/lib/widgets/widgets.facade.ts

Юра 🪐
Такой фасад тоже плохо делать?https://github.com/o...

Ладно-ладно, я не фронт-разраб Я не знаю что такое виджет даже просто увидел схему и применил свой опыт, походу мой опыт не релевантен тут вижу высокую связанность и пугаюсь 😂

Viktor-Novikov Автор вопроса
Евгений Гений
ну да верно. правильней мою реализацию назвать сер...

компоненты импортируют facade, чрез него например идёт сохранение или загрузка данных, список сущностей к примеру, справочники тоже(правильно ли?) наверное проще будет показать, компонент ничего про state не знает

Viktor-Novikov Автор вопроса
Viktor Novikov
https://gist.github.com/WiktorNowikow/5062bc27eb5f...

Если ты используешь форм билдер, зачем там new контролы?

Viktor-Novikov Автор вопроса
V - ntario
Если ты используешь форм билдер, зачем там new кон...

да, действительно, можно и без них, ты прав

Юра 🪐
Алиас для импорта

сущности тянутся из внешней либы?

Viktor Novikov
https://gist.github.com/WiktorNowikow/5062bc27eb5f...

советую сделать абстракцию для фасада InstitutionsWithoutInnDetailFacade, как в моих пемерах.

Viktor-Novikov Автор вопроса
Евгений Гений
а вы мокируете http сервисы?

нет, они просто у меня сгенерированы Swagger UI

Юра 🪐
screenshot

если тут @fem/api-interfaces лежат дто бекенда, то не верно их использовать в виджете.

Viktor Novikov
нет, они просто у меня сгенерированы Swagger UI

must have. https://github.com/evoytenkoapps/angular-best-practices#%D0%BC%D0%BE%D0%BA%D0%B8%D1%80%D1%83%D0%B5%D0%BC-%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D1%8B

Евгений Гений
если тут @fem/api-interfaces лежат дто бекенд...

Там не дто а интерфейсы, как тогда шарить интерфейсы между двумя апками

Юра 🪐
По сути да

их по хорошему, нужно мапить на такие же, но из другой папки. например models

Юра 🪐
По сути да

у вас бизнес зависит от http, это плохо с точки зрения той же dependency inversion

Евгений Гений
их по хорошему, нужно мапить на такие же, но из др...

По-хорошему дто должны лежать там, где их используют, а не прострации висеть в какой-то кучи всего Так изменение дто влечёт и изменения компонента/сервиса, одно место

Евгений Гений
их по хорошему, нужно мапить на такие же, но из др...

У меня на работе, одна и та же модель на разных ендоинтах имеет разные названия свойств)))

Юра 🪐
У меня на работе, одна и та же модель на разных ен...

Потому что это др модель и пересечение случайное Логический каплинг не достаточен для объединения в коде Дублирование данных не есть дублирование логики, и значит под dry не попадает

Viktor-Novikov Автор вопроса
Евгений Гений
must have. https://github.com/evoytenkoapps/angula...

мокировать, это же создавать искусственные сервисы?

Юра 🪐
У меня на работе, одна и та же модель на разных ен...

где то было место, где одно апи потом проходит три последовательных маппера перед использованием в компоненте. Там просто поля переименовываются туда сюда. издержки развития бизнес логики :)

xxtux Shvets
где то было место, где одно апи потом проходит три...

Кстати а как вы мапперы делаете? Я делаю клас в котором статик методы

Viktor Novikov
https://gist.github.com/WiktorNowikow/5062bc27eb5f...

почитайте мой гайд. вам там есть что поправить. 1) добавить модификаторы доступа на все 2) указать типы функций 3) убрать any 3) добавить явную отписку через takeuntil или заменить подписки на операторы высшего порядка.

Viktor-Novikov Автор вопроса
Евгений Гений
must have. https://github.com/evoytenkoapps/angula...

Swagger UI генерирует клиентский код по api, т.е. у меня настоящие сервисы http, им сгенерированные

Viktor-Novikov Автор вопроса
Евгений Гений
почитайте мой гайд. вам там есть что поправить. 1)...

да, спасибо, это я уже увидел многое по Вашим примерам

Юра 🪐
Кстати а как вы мапперы делаете? Я делаю клас в ко...

это не angular, но в целом так как и тут. объект с методами. В ангуляре статик методы не нужны, т.к. инжектор поставляет уже инстансы

Юра 🪐
А я инстанс и не делаю

статик метод - это метод не прототипа, а самой функции-конструктора.

Viktor Novikov
да, спасибо, это я уже увидел многое по Вашим прим...

вместо подписке в методе правильнее subject.next. Мне не нравится вообще подписки внутри фасада. как бы к утечкам памяти это не привело, т.к нет отписок. По хорошему от сабскрайба уйти надо. нужно поспрашивать у более опытных. Я понимаю что сервисы синглтоны, но кто знает, я думаю так не правильно делать.

Viktor Novikov
да, спасибо, это я уже увидел многое по Вашим прим...

я понял косяк. loadGlosItemStatuses - должен поток возращать, а не supbscription. переделайте на поток и подписывайтесь в компоненте. и будет норм. добавите в компоненте takeuntil, т.к там есть onDestroy

Viktor-Novikov Автор вопроса
Евгений Гений
почитайте мой гайд. вам там есть что поправить. 1)...

эммм не совсем понимаю, вот с loadGlosItemStatuses я думал всё норм он же темплейте вызывается (glosItemStatuses$ | async) , а такие подписки вроде уничтожаются автоматический после дестроя компонента? или нет?

Viktor Novikov
эммм не совсем понимаю, вот с loadGlosItemStatuses...

вот тут дичь( https://gist.github.com/WiktorNowikow/5062bc27eb5f209541353a3f40d4b7bc#file-institutions-without-inn-detail-component-ts-L89

Viktor-Novikov Автор вопроса
Viktor Novikov
эммм не совсем понимаю, вот с loadGlosItemStatuses...

надо сделать this.facade.loadGlosItemStatuses().pipe(takeUntil(...)).subscribe()

Viktor-Novikov Автор вопроса
Евгений Гений
надо сделать this.facade.loadGlosItemStatuses()....

вообще в принципе, если это статический справочник, который не поменяется, то это всё может проще в конструкторе фасада загрузить в стейт?

Viktor Novikov
onDestroy в компоненте же?

спешл фо ю https://github.com/evoytenkoapps/angular-best-practices/blob/english/examples/src/app/components/how-to-unsubscribe/unsubscribe.component.ts

Viktor Novikov
вообще в принципе, если это статический справочник...

не понимаю. переведите в фасаде все на реактивные потоки или интерактивные методы. все подписки в компонент.

Viktor-Novikov Автор вопроса
Евгений Гений
что в итоге то?

https://gist.github.com/WiktorNowikow/0ec1fbd2e3fde633187b9b3809620da4

Viktor-Novikov Автор вопроса
Евгений Гений
с map массива криво работаете.

можете подсказать, где именно косяк

Viktor Novikov
можете подсказать, где именно косяк

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

Viktor-Novikov Автор вопроса
Raman Yazvinski
screenshot результат мапа должен куда-то присваиваться, для д...

спасибо, понятно, проще тогда действительно forEach использовать с такими массивами

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

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

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
#include <stdio.h> #include <stdlib.h> #include <time.h> void mass_first_generate(int mass[5][7]) {     for (int N = 0; N < 5; N++) {         for (int A = 0; A < 7; A++) {   ...
Чувак
6
Всем привет! Решаю 99 OCaml Problems и столкнулся со следующей проблемой (прошу палками не забивать, я OCaml практически не трогал до этого момента): open OUnit2 let create_...
К|/|pи/\/\ 6е3yглbIи
2
Точно, оно. У тебя там имена потоков выставляются?
Александр (Rouse_) Багель
11
https://www.linkedin.com/posts/ugama-benedicta-kelechi-codergirl-103041300_mobiledevelopment-fluttertraining-handsonlearning-activity-7263445699227254784-IdHB?utm_source=share...
CoderGirl
16
возможно ли как-то передать в электрон или таури медиа поток с рендера 2д движка? двиг запускается как dll, а дальше надо как-то отправлять рендер кодировать не подходит, зр...
Kyle Nekto
7
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
Помогите пожалуйста. Делаю систему плагинов. Проблема сейчас в такая: плагины загружаются в основном потоке. FLibHandle := SafeLoadLibrary(FFileName) Но нужно еще выполнить фу...
Илья 🤣
10
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Карта сайта