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

Добрый день! Вопрос об организации хранения данных в приложении. Сейчас

в нем работает все на сервисах и самописных классах эмулирующими логику работы с данными таких как NGRX, NGSX или Akita. По началу все было круто, но количество данных растет, а удобство работы с кастомными решениями оставляет желать лучшего и требует рефакторига. Из личного анализа сложилось впечатление что изобретать велосипед не стоит и проще взять одно из готовых решений вроде таких как NGRX, NGSX или Akita. Стоит ли переезжать на один из стейтменеджеров или зарефакторить и улучшить кастомное решение?

22 ответов

22 просмотра

Если вас устраивало кастомное решение, то обратите внимание на это https://ngrx.io/guide/component-store

Mirehiko- Автор вопроса

Устраивать то устраивало, но с оговоркой. В том плане, что данных по началу было мало, а экспертизы при работе со стейтменеджерами не было никакой. Поэтому было решено использовать простые сервисы и запилить кастомное решение с пометкой себе параллельно ознакомиться/изучть один из стейтменеджеров. Сейчас данные плодятся с огромной скоростью и менеджить их кастомным решением в его текущей версии стало неудобно. А поскольку за это время появились знания и небольшой опыт с ngrx, то кастомное решение стало казаться велосипедом х)

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

Mirehiko
Устраивать то устраивало, но с оговоркой. В том пл...

Если не нравится громоздкость NGRX, посмотрите https://github.com/ngneat/elf

бери акиту

Oleg Safonov
О, наконец то кто то еще напоролся на это, а то ту...

А можно поподробнее про проблему, а то как-то абстрактно всё. В чём сложность поддержки? У меня к примеру есть папка со стейтом, в папке делаю кучу сервисов, которые будут отвечать за определенный набор данных. Единственная проблема в том, как эти сервисы организовать. Но это больше проблема архитектуры. И она не выглядит такой уж страшной по сравнению с бойлерплейтом стейтменеджеров

Ну значит все тут сплошь архитекторы от бога)

Mirehiko
Устраивать то устраивало, но с оговоркой. В том пл...

А есть какая-то конкретика, а то "стало неудобно" и "стало казаться велосипедом" - это как-то очень абстрактно

Mirehiko- Автор вопроса
Maxim Afanasev
А есть какая-то конкретика, а то "стало неудобно" ...

хм... есть базовый класс, который описывает логику хранения данных с методами: добавить, удалить, изменить, вернуть весь список, вернуть по id, полю. Внутри него есть 2 BehaviorSubject, один для получения начального состояния (или если мы полностью переписываем стор данными), второй для получения единичных изменений. Для каждого типа данных мы делаем инстанс стора. Все хорошо работает, пока в компоненте выводится 1 тип данных, просто подписываемся на стор и все. Когда в компоненте нужно вывести несколько типов, начинаются танцы со сторами. В компоненте идет куча подписок на разные сторы, которые в конечном счете преобразуются в один общий для отрисовки. В итоге имеем кучу подписок на сторы в компоненте, что не круто и сейчас от этого избавляемся. Создаем сервис-обертки для каждого компонента, которые собирают подписки из разных сторов в одну общую.

Mirehiko
хм... есть базовый класс, который описывает логику...

а ngrx вас как спасет от вашей кучи подписок? у него тоже потоки для получения данных. все тож самое будет

Мне лично больно смотреть, как в простейших сценариях использует стм и прочий оверинжигиринг. Я не думаю, что для того, чтобы показать данные с сервера в табличке и отправить данные из формы на сервер, нужен какой-то опыт с стм. Просто HttpClient, который описан в документации. Проблема ngrx, как и redux, не в самом подходе, а в его ультимативности, всё делают через ngrx. Я считаю, что простые вещи надо делать просто. И то, что где-то в приложении есть пара сложных кейсов, не означает, что всё остальное теперь надо усложнить

Mirehiko- Автор вопроса

Бизнесу таки эксперименты не понравятся, ибо время деньги)

Maxim Afanasev
Мне лично больно смотреть, как в простейших сценар...

не использовать ок если сценарий и останется простейшим

Mirehiko
Бизнесу таки эксперименты не понравятся, ибо время...

без ресерчей вы рискуете еще больше денег потерять

норм же или что конкретно не понравилось?

Evgheni Чернявский
норм же или что конкретно не понравилось?

Вообще все говно. Нейминги ужасные, api безидейный как и вся либа.

Mirehiko
хм... есть базовый класс, который описывает логику...

Вы описали нормальных подход (различные источники и форматы данных и сервис - фасад для компонента, в котором лежит комбайн данных нужных компоненту и логика общения со всем чем нужно), только с попыткой как-то унифицировать все под одну гребенку. Бывает такое что ангуляровский клиент работает с разными апихами, в этом случае попытка все супер унифицировать вызывает боль. Приятно написать stateless сервисы для общения с чем-либо, stateful сервисы для хранения и апдейта данных. Таких вот ребят будет много и желательно чтоб они были переиспользуемые. Дальше можно данные подгонять под удобный компоненту формат в сервисе-фасаде или же прям в компоненте, используя отдельные сервисы-конверторы. В этом случае все данные могут в нужных фасадах/компонентах контроллируемо по необходимости переплетаться. Но важно пилить атомарные простые сервисы чтоб их можно было без труда композировать. Ну и именовать их чтобы не путаться)

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

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

#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
https://www.linkedin.com/posts/ugama-benedicta-kelechi-codergirl-103041300_mobiledevelopment-fluttertraining-handsonlearning-activity-7263445699227254784-IdHB?utm_source=share...
CoderGirl
16
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Помогите пожалуйста. Делаю систему плагинов. Проблема сейчас в такая: плагины загружаются в основном потоке. FLibHandle := SafeLoadLibrary(FFileName) Но нужно еще выполнить фу...
Илья 🤣
10
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Гляньте, че бывает: Сегодня по одному проекту одной вебстудии делал проект небольшой, на их хостинге. На Modx revo. В определенный момент , работая в админке, вдруг перестал р...
Artem
7
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
12
> Копаем глубже > Следующий момент был, когда я спросил его, знает ли он JavaScript. Он ответил, что его учили работать с C#. Я тоже в университете писал на C#, но даже там мн...
Oleg Volkov
4
Карта сайта