Коммуникация
Цель: Обеспечить независимость модулей, избежать прямых зависимостей между features и сохранить предсказуемую архитектуру.
Сквозные задачи (Cross-Cutting Concerns)
MUST
- Инфраструктурные клиенты (SDK) размещать в
shared/lib/.
// ✅ shared/lib/analytics/analytics.ts
export const analytics = {
track: (event: string, properties?: Record<string, any>) => {
// Отправка события в аналитическую систему
},
init: (apiKey: string) => {
// Инициализация SDK
},
};
- Глобальную инициализацию и провайдеры размещать в
app/providers/.
// ✅ app/providers/analytics.tsx
import { useEffect, type PropsWithChildren } from 'react';
import { analytics } from '@/shared/lib/analytics';
import { config } from '@/shared/config';
type Props = PropsWithChildren;
export function AnalyticsProvider({ children }: Props) {
useEffect(() => {
analytics.init(config.analyticsId);
}, []);
return <>{children}</>;
}