Продолжение поста о том как можно упростить себе работу и уменьшить боль.
> Централизация и переиспользумость
🕚Тут буду говорить про то, чтобы одинаковая логика была реализована один раз в одном месте и дальше использовалась по всему проекту.
🔄 Пример: Централизованный кэш API
// страница товаров
if (sessionStorage.getItem("products")) {
return JSON.parse(sessionStorage.getItem("products")!);
} else {
const products = await api.getProducts();
sessionStorage.setItem("products", JSON.stringify(products));
return products;
}
такая ситуация не очень хороша, т.к. каждый экран сам кэширует результаты API
// services/cacheService.ts
export async function withCache<T>(key: string, fetcher: () => Promise<T>): Promise<T> {
const cached = sessionStorage.getItem(key);
if (cached) return JSON.parse(cached);
const data = await fetcher();
sessionStorage.setItem(key, JSON.stringify(data));
return data;
}
тут вынесли кэширование в отдельный сервис и он будет использоваться в одном месте.
const products = await withCache("products", () => api.getProducts());
То есть, если мы захотим поменять
sessionStorage на localStorage мы сделаем это в одном месте. Если без сервиса, во всех 30-40-50 мест.🔚Делая итог, главная идея такая:
1. Вынести повторяющуюся/общую логику в сервисы, адаптеры, валидаторы, утилиты.
2. Сделай одну центральную точку правды.
Тогда изменения не будут ронять весь проект.