HowProgrammingWorks - JavaScript and Node.js Programming
6.34K subscribers
306 photos
7 videos
1 file
745 links
Программная инжененрия для JavaScript, TypeScrip, Node.js 👉 Group: https://t.me/MetarhiaHPW 👉 Node.js channel: https://t.me/metarhia 👉 Node.js group: https://t.me/nodeua
Download Telegram
Признак хорошо спроектированного контракта (будь то интерфейс, сигнатура, абстрактный класс, фасад, тип, API…) — это когда:
Понятно, как использовать, не заглядывая в исходники. Достаточно имен и, в крайнем случае, тестов или примеров.
Не требует трассировки вызовов в реализации контракта. Всё очевидно на уровне интерфейса.
Ошибки локализуются в 1 шаг, без анализа длинных цепочек вызовов.
Следует LoD (Law of Demeter) и принципу "Do not talk to strangers", ограничивая ненужные зависимости.
Использует осмысленное именование, которое отражает суть и минимизирует когнитивную нагрузку.
💡 Как сделать новый популярный фреймворк:
1. Взять один случайный паттерн
2. Дать ему неузнаваемое название
3. Сделать презентацию, пообещав всем, что это и есть решение всех проблем
Please open Telegram to view this post
VIEW IN TELEGRAM
В чем преимущество этого фреймворка?
- нет ничего лишнего
- все очень просто
- мы решили все проблемы
- добавлены удобные фишки
- исправлены почти все баги
- заехала новая архитектура папочек
- поддержка TS через удаление типов
- чтобы писать ни нужно знать ничего, ведь это будущее...
Когда внук начал программировать на TypeScript, дедушка переписал на суслика свою квартиру
Скоро в метархии будет новый Emitter оптимизированый для V8, на него переедут протокод metacom, сервер приложений impress, и т.д. но вообще его полезно даже просто почитать: https://github.com/metarhia/metautil/blob/ee/lib/events.js

const ee = new Emitter();
ee.on('eventA', (data) => {
console.log({ data });
// Prints: { data: 'value' }
});
ee.emit('eventA', 'value');


const ee = new Emitter();
setTimeout(() => {
ee.emit('eventA', 'value');
}, 100);
const result = await ee.toPromise('eventA');


const ee = new Emitter();
passReferenceSomewhere(ee);
const iterable = ee.toAsyncIterable('eventB');
for await (const eventData of iterable) {
console.log({ eventData });
}