Реализовал сегодня на работе Tagless Final на TypeScript для работы с браузерным стораджем. А потом выкинул нахуй. Расскажу немного о контексте такого решения.
Сейчас на работе я пишу SDK, с помощью которого будут писать переиспользуемые модули — блоки бизнес-функциональности, которые можно подключать к любому (в теории) приложению как некие черные ящики, тем самым экономя бизнесу деньги на повторную разработку. В рамках этого SDK нужно реализовать слой персистенса, абстрагирующегося от некоего хранилища. Это может быть session storage, local storage, IndexedDB, WebSQL или вообще персист на сервер через REST. Я спроектировал это так, что модуль получает на вход абстрактную алгебру StorageAlgebra, у которой эффект синхронного или асинхронного вычисления вынесен в некую монаду M, о которой модуль знать ничего не знает до тех пор, пока его не запустят с конкретным инстансом нужного стораджа. По сути, мне пришлось реализовать паттерн Tagless Final для этого стораджа. В тайпскрипте, как в языке, где нет типов с дырками, это отдельная боль. И вот, вроде бы, счастье — тесты зелёные, можно подсовывать как синхронные, так и асинхронные алгебры, и всё будет работать…
Но есть нюанс. В рамках продвигаемой архитектуры приложений я требую, чтобы все работы с хранилищем и сетевыми запросами происходили в рамках redux-saga. Которые сами по себе асинхронные. И этот факт наглухо перечёркивает всю предполагаемую гибкость. Мы уже живём в асинхронном контексте, нет пути назад. Поэтому я выкинул весь код с TF, попутно избавив себя от необходимости объяснять его коллегам из вверенных мне команд, оставив в качестве единого для всех интерфейса пакет localForage.
Мораль: нельзя позволять себе терять виденье общей картины, углубляясь в столь приятные (но порой ненужные) технические детали.
Такие дела.
Другие посты по теме...
Darth Biology @darthbiology
#новость
Ну что, друзья, будем потихоньку возвращаться к обычному режиму публикаций. И начнём мы с того, какие изменения в области здравоохранения ждут жителей России.
По пунктам:
• финансирование диспансерного наблюдения...
|
|
SHARE WOOD Платное теперь бесплатно! @eachfree
🍏 Webformyself - Анатомия прибыльного лендинг пейдж
По итогам курса:
Вы будете четко понимать, что такое автономная целевая страница; Сможете создавать хорошие лендинги, которые справляются со своей задачей; Узнаете...
|
|
Хитрости жизни Лайфхаки @lifehacks_tg
6 секс-позиций, которые женщины просто ненавидят
В этих позах партнёрше может быть некомфортно. Или же она банально не получает от них удовольствия. Но все недостатки можно исправить!
https://goo.gl/pQvMn6...
|
|
Сталингулаг @stalin_gulag
Не могу спокойно читать напыщенные блевотной бравадой речи бюрократической швали и прочих героев клавиатуры и мыши, которые в своей жизни ничего тяжелее хуя не держали, причём чаще всего даже не своего. Как же омерзительны...
|
|
Твои Блогерши @karinasexy
ВСЁ. Пиздец Телеграмму!
Каждый день правительство блокирует миллионы IP различных сервисов в погоне за творением Дурова. В результате не работают крупные сайты, многие компании лишаются возможности принимать платежи....
|