🔥

Тред (Чарльза Доджсона)


Отдавая всё же должное Mongoose... Мне импонирует их реализация наследования. Ещё у них работает Slack и жив github. Ru канал в telegram. И Typegoose тоже хорошо, ребята пробовали и полёт нормальный. И GraphQL, да и много где движок поддерживается, и хорошо.

Но вот что меня всегда смущало с данными в принципе, так это то, что сам процесс их модификации обычно нормально не описывается ничем из того, что я знаю. Скорее всего просто знаю мало. И систем типов тут "такой себе" помощник, хотя, конечно, подспорье.

Для меня тонкость состоит в том, что Данные и момент их трансформации из одного типа в другой обычно всеми воспринимаются как нечто само собой разумеющееся. Мол, там привоили, тут конвертировали, написали тесты -- всё, готово, пользуйтесь. Ну можно в log нужное, и...

Вроде бы это так вот банально, и что, вот ну что может быть тут не так? Но почему так много ошибок происходит именно здесь, даже при наличии тестов, чётких контрактов и прочих достижений ИТ сферы? На мой взгляд дело в том, что модифицировать данные очень легко.

И суть не в мутабельности или иммутабельности, и не в типах, а в самой простоте процесса преобразования. Пишешь оператор присваивания и всё, память изменила значение. Практически вне зависимости от языка это является базовой операцией, естественной и элементарной, нераздумывая.

Вся хрупкость ощущается, когда смотришь на данные через давно известные методологии проектного управления. Шутка в том, что они исходно предназначены для описания процессов во времени, в отличие нашей привычки делить время алгоритма на до/сейчас/после: en.wikipedia.org/wiki/Program_e…

И вот если смотреть на оператор присвоения через призму Gantt Chart, то становится ясна одна очень существенная деталь. В отличие от диаграммы, где у каждой задачи есть минимум: имя, срок и результат; эта операция в алгоритме очень редко является чем-то настолько же оформленным.

Даже когда есть указание на типы примитивов и структур и/или их валидация. Даже когда есть Конструкторы структур. Даже когда конвертации из одного структурного типа в другой специально оформленны в методы ... Даже тогда сам процесс конвертации остаётся "Подразумевающимся".

Шучу, конечно, ничего я такого не делаю ;^) Это в самом деле ничего не даст. Никто не будет лезть в доку, никто не будет эту муть читать. Лучше писать зависимости сразу в код. В моём случае это монады на цепочках прототипов, где имя конструктора это и есть момент трансформации.