Хочется странного датабиндинга на стероидах

Feb 25, 2014 23:22

React охуенен. Я как все устаканю отпишу обязательно.

Для полного экстаза оперденестроения, хочется понять как решать такую задачку:

В оперденях есть формы. У них есть какой-то "основной" стейт, грубо говоря все поля - то что мы умеем получать с сервера и сохранять туда же. Объект, который мы редактируем, и ничего более. Ну, типа для формы с полем "Name" и списком с добавить/удалить в элементах которого - дропдаун и поле ввода для чисел, стейт будет с каким-то таким типом: { string orderName, [{ int productId, int amount}]}.

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

Чтобы все эти save/cancel/undo работали, стейт хочется держать монолитным и сериализуемым. по крайней мере иметь возможность в любой момент его вынуть и вставить другой.

С другой стороны, есть компоненты, которые делают что-то типа "если чувак выбрал что-то в дропдауне, надо в табличку навалить элементы из словарика по выбранному ключику". И с этой стороны хочется давать этим компонентам возможность влезть в момент когда дропдаун обновляет стейт, и заодно обновить стейт таблички. Чтобы работали механизмы типа undo, стейт должен поменяться атомарно, никакие события типа "что-то в стейте поменялось" - не катят.

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

Я изобразил пока наколенный data binding - есть обертка над общим стейтом, от которой можно кусочек с get()/set() отколоть и отдать, а от него - можно еще кусочек рекурсивно. Что-то на линзы похожее короче. Оно работает, но пахнет императивным пиздецом.

Может быть кто посоветует чего? Мне видится что-то типа гибрида FRP и линз - от FRP возможность гибко содинять и "врезаться в провод", от линз - двунаправленность. Или может я FRP не раскурил, и через него это все решаемо?

Также не откажусь от любых советов/ссылок/книжек по теоретическому и прикладному оперденестроению.
Previous post Next post
Up