∏ρ؃uñçτØρ Øπτµç∑ | 👁‍🗨››››
39.2K subscribers
9.86K photos
21 videos
2 files
330 links
[профyнктор òптикс]

КАНАЛ С ВАКАНСИЯМИ: @profunctor_jobs
ПРЕДЛОЖКА: @pfoptix_bot
ШАБЛОНЫ: @profunctor_templates

«Эпицентр интернет-культуры в данный момент» ©
Download Telegram
Реализовал сегодня на работе Tagless Final на TypeScript для работы с браузерным стораджем. А потом выкинул нахуй. Расскажу немного о контексте такого решения.

Сейчас на работе я пишу SDK, с помощью которого будут писать переиспользуемые модули — блоки бизнес-функциональности, которые можно подключать к любому (в теории) приложению как некие черные ящики, тем самым экономя бизнесу деньги на повторную разработку. В рамках этого SDK нужно реализовать слой персистенса, абстрагирующегося от некоего хранилища. Это может быть session storage, local storage, IndexedDB, WebSQL или вообще персист на сервер через REST. Я спроектировал это так, что модуль получает на вход абстрактную алгебру StorageAlgebra, у которой эффект синхронного или асинхронного вычисления вынесен в некую монаду M, о которой модуль знать ничего не знает до тех пор, пока его не запустят с конкретным инстансом нужного стораджа. По сути, мне пришлось реализовать паттерн Tagless Final для этого стораджа. В тайпскрипте, как в языке, где нет типов с дырками, это отдельная боль. И вот, вроде бы, счастье — тесты зелёные, можно подсовывать как синхронные, так и асинхронные алгебры, и всё будет работать…

Но есть нюанс. В рамках продвигаемой архитектуры приложений я требую, чтобы все работы с хранилищем и сетевыми запросами происходили в рамках redux-saga. Которые сами по себе асинхронные. И этот факт наглухо перечёркивает всю предполагаемую гибкость. Мы уже живём в асинхронном контексте, нет пути назад. Поэтому я выкинул весь код с TF, попутно избавив себя от необходимости объяснять его коллегам из вверенных мне команд, оставив в качестве единого для всех интерфейса пакет localForage.

Мораль: нельзя позволять себе терять виденье общей картины, углубляясь в столь приятные (но порой ненужные) технические детали.

Такие дела.
нормальный канал и посты интересные
Don’t be mean on me Coinbase 🥺