Size: a a a

Elm Lang сообщество разработчиков

2020 August 17

RT

Roman Truschev in Elm Lang сообщество разработчиков
А можно пояснить в чем тут проблема с ремоут дата? Вот есть к примеру в модели коллекции zones, countries, states все это грузится одновременно при старте страницы. Когда условно все три прошли то отображаем что то.
источник

RT

Roman Truschev in Elm Lang сообщество разработчиков
Чем тут ремот дата плох ? Удобно спинеры показывать
источник

DK

Denis Krivosheev in Elm Lang сообщество разработчиков
Roman Truschev
А можно пояснить в чем тут проблема с ремоут дата? Вот есть к примеру в модели коллекции zones, countries, states все это грузится одновременно при старте страницы. Когда условно все три прошли то отображаем что то.
В вашем примере все прекрасно, а вот чуть-чуть усложнить, например надо выбрать страну и тогда загрузятся Штаты, потом выбрать штат - загрузятся города и так далее - уже беда выходит. Например у вас модель может выразить несуществующее состояние, например города в состоянии саксесс, штат в состоянии лоадинг, а страна вообще в ошибке... как это понимать? Что отображать?
источник

DK

Denis Krivosheev in Elm Lang сообщество разработчиков
Но если сущности действительно полностью изолированы друг от друга, то можно и ремоут дата использовать
источник

DK

Denis Krivosheev in Elm Lang сообщество разработчиков
Или другой пример, есть соц сеть, в приложении есть текущий пользователь, его друзья. Вот у нас есть например два эндпоинта, текущий пользователь и список друзей пользователя по айди. Это очевидно зависимые данные, потому что чтобы даже запросить список друзей - нужен айди текущего пользователя. Если это смоделировать с помощью двух ремоут дата - будет беда, огромное количество невалидных состояний, каждое из которых нужно обрабатывать. Это именно те кейсы которые «никогда не должны произойти», в которых в абдейтере мы выбрасываем ( model, Cmd.none ) а во вьюхе у нас несколько бранящей с text “”
Но такого можно легко избежать, если грамотно смоделировать приложение.
Перестать писать редукс на элме, переделать модель из рекорда в сумму типов, где анонимный пользователь не может иметь никаких друзей ни в каком состоянии, а залогиненый пользователь всегда имеет свои данные, включая айди, а так же, возможно, своих друзей... может быть даже в ремоут дата, однако я не советовал бы, потому что когда приложение начнёт расти у нас обязательно появится множество зависимостей, в том числе и от друзей....
источник

RT

Roman Truschev in Elm Lang сообщество разработчиков
Это все я согласен но по сути состояния будут "примерно" такие же. И loading будет и error и саксес.
источник

RT

Roman Truschev in Elm Lang сообщество разработчиков
Грузим юзера показываем спинер потом загрузив его грузим друзей другой спинер. Где то отвалится покажем в соотв месте ошибку
источник

DK

Denis Krivosheev in Elm Lang сообщество разработчиков
Нет, состояния будут сильно отличаться... например нам не нужен еррор для всего состояния на свете, в большом количестве случаев нам нужна одна страница «something went wrong”, на которую переводятся все невосстановимые ошибки, при этом изнутри стэйта они выводятся
источник

DK

Denis Krivosheev in Elm Lang сообщество разработчиков
Это я поо то, что тут нельзя быть слишком абстрактным и лепить ремоут дата на каждый бэкенд эндпоинт. Все очень сильно зависит от приложения
источник

DK

Denis Krivosheev in Elm Lang сообщество разработчиков
Пока тот десяток раз что я заиспользовал ремоут дата, каждый раз как приложение развивалось мне приходилось его выпиливать оттуда
источник

DK

Denis Krivosheev in Elm Lang сообщество разработчиков
Roman Truschev
Это все я согласен но по сути состояния будут "примерно" такие же. И loading будет и error и саксес.
А кстати, возможно я недостаточно понятно выразился, но я имел ввиду что один стейт лежит внутри другого
источник

DK

Denis Krivosheev in Elm Lang сообщество разработчиков
что-то такого плана
type App
   = Unauthorized UnauthorisedState
   | Authorized UserData
   | GlobalError Error

type UserData
   = LogedIn Cridentials
   | FriendsLoaded Cridentials Friends

type alias Cridentials =
   { id : String
   , login : String
   }

type alias Friends = List Friend
источник

DK

Denis Krivosheev in Elm Lang сообщество разработчиков
это очень грубый набросок, конечно там очень много разных деталей, в зависимости от UX
источник

DK

Denis Krivosheev in Elm Lang сообщество разработчиков
тут во многом вопрос больше в том, когда использовать сумму типов, а когда произведение... для меня здесь ключевой момент, можно ли в существующих типах выразить состояние, которое в моем приложении не должно существовать никогда... если можно, скорей всего смоделировано неправильно. В редких исключениях это допустимо, но тогда нужно стараться хотя бы рантаймом защититься, сделать тип опакью и предоставить функциональное апи (воркфлоу) с валидациями
источник

DK

Denis Krivosheev in Elm Lang сообщество разработчиков
а если в модели есть больше одной ремоут дата, то чаще всего такие состояния присутствуют... оно их прямо таки притягивает
источник
2020 August 18

MP

Max P in Elm Lang сообщество разработчиков
Привет, снова вопрос.. тут написано как лучше проект разделить https://orasund.gitbook.io/elm-cookbook/frequently-asked-questions-1/how-to-structure-an-elm-project , у нас в старых elm 0.18 тоже разделение было примерно такое же..

но я вроде бы читал где-то, что так разделать на Data.elm, Update.elm, View.elm не нужно...

как у вас?
источник

AY

Alexey Yurchenko in Elm Lang сообщество разработчиков
Max P
Привет, снова вопрос.. тут написано как лучше проект разделить https://orasund.gitbook.io/elm-cookbook/frequently-asked-questions-1/how-to-structure-an-elm-project , у нас в старых elm 0.18 тоже разделение было примерно такое же..

но я вроде бы читал где-то, что так разделать на Data.elm, Update.elm, View.elm не нужно...

как у вас?
Evan сейчас против такой структуры
источник

AY

Alexey Yurchenko in Elm Lang сообщество разработчиков
Есть видео по теме https://www.youtube.com/watch?v=XpDsk374LDE
источник

MP

Max P in Elm Lang сообщество разработчиков
Alexey Yurchenko
Evan сейчас против такой структуры
да я думаю я оттуда и видел..хм
источник

AY

Alexey Yurchenko in Elm Lang сообщество разработчиков
Max P
да я думаю я оттуда и видел..хм
есть
https://github.com/rtfeldman/elm-spa-example
с текущем виденьем без левых либ типа tea-combine
источник