Fork me on GitHub
#clojure-russia
<
2017-04-10
>
ul11:04:44

я как-то абстрагировал re-frame от реагента, мы его с омом старым использовали https://github.com/condense/ampere — порт, правда немного отстал от апстрима за это время, ко-эффектов и прочего нет

ul11:04:22

но вот я сейчас собираюсь писать приложение на cljs и брать re-frame или другой redux-like не хочется =(

ul11:04:07

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

ul11:04:37

всё, что реально получается переиспользовать — это много разных мелких хелперов, а цельные компоненты пропростают в приложение

ul11:04:12

уже который день не могу развеять печаль, посмотрел на всё, что перечислено здесь https://staltz.com/unidirectional-user-interface-architectures.html, и на классический MVC посмотрел снова, и не знаю, какую архитектуру заложить в приложение

ul12:04:33

есть у уважаемого сообщества успешный опыт, на который можно опереться?

artemyarulin12:04:39

дак а что конкретно не нравится в redux-like? То что большие компоненты не переиспользовать, дак на то они и большие это ок

ul12:04:49

иллюзии того, что большие UI-куски можно переиспользовать, нет. проблема скорее в том, что много мест, которые хотелось бы вынести либо в какие-то отдельные поведения/миксины, либо инкапсулировать в компоненте, часто дублируются в actions & reducers с привязкой к конкретным типам действий и адресам в стейте. higher-order actions & reducers иногда помогают, но чаще выглядят костылём, уж лучше ввести локальный стейт было бы.

ul12:04:23

вот здесь ещё неплохие примеры и постановка проблемы (хотя и недостаточно подробная, с первого взгляда кажется "ну и чо, два одинаковы компонента легко зафигачить, сто раз делали") https://github.com/slorber/scalable-frontend-with-elm-or-redux

artemyarulin12:04:48

>и адресам в стейте не пробовали нормализовать стейт? Чтоб не было как-раз дикой вложенности. Я помню ом-некст очень хорошо описывает эту тему да и нормализует из коробки по сути

ul12:04:50

вот om next у меня следующий в списке на почитать в гамаке

ul12:04:47

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

ul12:04:05

наверное, потому что они обслуживают по сути контроль, а не просто data-dependencies

artemyarulin12:04:27

>с данными из домена самого приложения хуже хм, так то разницы же не должно быть, что данные нормализуются, что внутренние данные приложения. Что-нить типа

{:data {:account/by-id {:1 {:name “John”}}
                        :2 {:name "Frank"}}}
 :ui {:chart/by-name {:profit {:y-name "Money" :x-name "Time" ...}}}}

artemyarulin12:04:53

рекомендую посмотреть еще на http://witheve.com. Очень зачетная тема

ul12:04:00

да, Крис продолжает жечь 😃 спасибо за напоминание, перечитаю и про Eve в рамках этого мини-исследования

artemyarulin13:04:29

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

ul13:04:39

я тут уже даже на smalltalk смотреть начал, к слову очень сильно напоминает многое из того, что я вижу в функциональном мире, только завёрнутое в объекты вместо неймспейсов + контрактов данных ))))

ul13:04:55

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

ul13:04:18

какими бы я хотел видеть Chrome DevTools, чтобы прямо в них понимать и писать приложение

andrewboltachev13:04:23

Всем привет. А Om Next правда начинает набирать обороты? То есть они добились того чего хотели? Где-то полгода назад всё было только непонятно

andrewboltachev13:04:49

т.е. я понимал что есть например поддержка кэширования браузером запросов

andrewboltachev13:04:19

а всё остальное, особенно "парсер" не было понятно вообще

andfadeev14:04:17

блин, тоже хотел скинуть, причем мне это прислали люди которые к clojure вообще отношения не имеют)

andmed14:04:35

ктот спрашивал про java9, понравилось AOT в контексте кложи может быть актуально http://openjdk.java.net/jeps/295 и еще понравились коллекции с человеч лицом Map.of(k1, v1, k2, v2, k3, v3) http://openjdk.java.net/jeps/269

andmed14:04:47

модули пока пугают как-то этот jlink

kishanov16:04:04

@ul можно поподробней, в чем проблема с компонентами в re-frame? у нас все приложение попилено на компоненты, связываются через subscription’ы, каждый компонент, которому нужен свой state - хранит его в базе по своему уникальному пути

kishanov16:04:30

(shameless plug) у нас есть DataTable (https://kishanov.github.io/re-frame-datatable/), он не зависит от pagination и от search - это отдельные компоненты, которые друг другу передают subscription

kishanov16:04:35

т.е. чтобы сделать searchable paginable table надо завести компонент search который подписывается на сырые данные и применяет search, datatable и pagination подписываются на subscription который высовывает search после применения

kishanov16:04:09

ну или если надо сделать higher-order component, можно делать так

kishanov16:04:50

любой компонент, который должен отобразить какие-то данные с сервера может быть в него завернут и он будет показывать loading spinner/error/component в зависимости от состояния данных

kishanov16:04:30

вот из текущего приложения как рендерятся компоненты - по принципу матрешки

[container-views/data-from-server-view-container
                                       [blueprints-views/scaffolding-container
                                        [container-views/nav-menu-container
                                         [blueprints-views/blueprint-details-physical-view]
                                         ::routes/details]]
                                       [::routes/physical ::routes/details]]

kuzmin_m19:04:54

Я почти год занимаюсь clojure. И весь этот год я испытывал отвращение и не понимал идею stuartsierra/component. После того, как я сделал 2 велосипеда, почитал книжки и статьи, внимательно посмотрел презетацию, я могу сказать, что понял его идею и этой библиотекой можно пользоваться. Если кто-то не понимает сomponent, то обращайтесь - расскажу то, что понял я.

rmuslimov20:04:05

@kuzmin_m А может я что то упускаю? Что именно “щелкнуло” за этот год? Для меня это место куда можно накидать вотчеров, сервисы что то подобное и потом релодить по хоткею в IDE

rmuslimov20:04:19

это собственно на первой странице и написано https://github.com/danielsz/system

rmuslimov20:04:27

например тут