Отдавая всё же должное Mongoose...
Мне импонирует их реализация наследования.
Ещё у них работает Slack и жив github. Ru канал в telegram. И Typegoose тоже хорошо, ребята пробовали и полёт нормальный. И GraphQL, да и много где движок поддерживается, и хорошо.
Но вот что меня всегда смущало с данными в принципе, так это то, что сам процесс их модификации обычно нормально не описывается ничем из того, что я знаю. Скорее всего просто знаю мало. И систем типов тут "такой себе" помощник, хотя, конечно, подспорье.
Для меня тонкость состоит в том, что Данные и момент их трансформации из одного типа в другой обычно всеми воспринимаются как нечто само собой разумеющееся. Мол, там привоили, тут конвертировали, написали тесты -- всё, готово, пользуйтесь. Ну можно в log нужное, и...
Вроде бы это так вот банально, и что, вот ну что может быть тут не так?
Но почему так много ошибок происходит именно здесь, даже при наличии тестов, чётких контрактов и прочих достижений ИТ сферы? На мой взгляд дело в том, что модифицировать данные очень легко.
И суть не в мутабельности или иммутабельности, и не в типах, а в самой простоте процесса преобразования. Пишешь оператор присваивания и всё, память изменила значение. Практически вне зависимости от языка это является базовой операцией, естественной и элементарной, нераздумывая.
Вся хрупкость ощущается, когда смотришь на данные через давно известные методологии проектного управления. Шутка в том, что они исходно предназначены для описания процессов во времени, в отличие нашей привычки делить время алгоритма на до/сейчас/после:
en.wikipedia.org/wiki/Program_e…
И вот если смотреть на оператор присвоения через призму Gantt Chart, то становится ясна одна очень существенная деталь. В отличие от диаграммы, где у каждой задачи есть минимум: имя, срок и результат; эта операция в алгоритме очень редко является чем-то настолько же оформленным.
Даже когда есть указание на типы примитивов и структур и/или их валидация. Даже когда есть Конструкторы структур. Даже когда конвертации из одного структурного типа в другой специально оформленны в методы ... Даже тогда сам процесс конвертации остаётся "Подразумевающимся".
Шучу, конечно, ничего я такого не делаю ;^)
Это в самом деле ничего не даст. Никто не будет лезть в доку, никто не будет эту муть читать. Лучше писать зависимости сразу в код. В моём случае это монады на цепочках прототипов, где имя конструктора это и есть момент трансформации.