Ответ
High Cohesion в FSD (Feature-Sliced Design) означает, что модули или слои приложения должны быть тесно связаны внутри своей функциональной области, но слабо связаны с другими. Это повышает читаемость и поддерживаемость кода.
Пример:
// Плохо: низкая связность (разные ответственности в одном модуле)
function fetchUserAndRenderProfile(userId) {
// Загрузка данных
const user = await api.fetchUser(userId);
// Рендеринг
renderProfile(user);
}
// Хорошо: высокая связность (разделение на feature-слои)
// features/profile/api.ts
export const fetchUserProfile = (userId) => api.fetchUser(userId);
// features/profile/ui/Profile.tsx
export const Profile = ({ user }) => <div>{user.name}</div>;
Ключевые принципы:
- Каждый модуль решает одну четкую задачу
- Логика группируется по бизнес-назначению
- Минимизация зависимостей между слоями
Ответ 18+ 🔞
А, слушай, вот эта ваша High Cohesion в FSD, ну это ж, блядь, элементарно, Ватсон! Это когда всё, что по одной теме, лежит в одной куче, а не разбросано по проекту, как говно по тарелке.
Представь, ты пишешь профиль пользователя. И вот, мудак, ты в одном файле и данные тянет, и на экран рисует, и ещё, нахуй, аватарку в облако загружает! Это пиздец, чувак. Это низкая связность, или, как я это называю, «спагетти-код на минималках». Открываешь такой модуль — а там овердохуища всего, и хуй разберёшь.
А должно быть вот так, красиво, по слоям, как в хорошем торте «Наполеон», блядь:
// features/profile/api.ts — тут только запросы, чистая логика данных, ебать её в сраку
export const fetchUserProfile = (userId) => api.fetchUser(userId);
// features/profile/ui/Profile.tsx — а тут уже, сука, только вёрстка, принимает данные и рисует
export const Profile = ({ user }) => <div>{user.name}</div>;
Видишь разницу? В первом случае — манда с ушами. Во втором — каждый модуль, как солдат, знает свой манёвр. Один — стреляет (запрашивает), другой — красиво марширует (рисует).
Короче, правила простые, ёпта:
- Один модуль — одна чёткая задача. Не «сделать всё», а «получить юзера» или «показать аватар».
- Группируй всё по смыслу, по фиче. Всё для профиля — в
features/profile. Всё для корзины — вfeatures/cart. Не тащи логику корзины в модуль авторизации, ты чё, ебобо? - Своди зависимости между слоями к минимуму. UI не должен лезть в API напрямую, как голодный студент в холодильник к соседу. Используй прослойки, хуле.
Соблюдаешь это — код становится читаемым, как анекдот про Штирлица. Нарушаешь — получаешь монстра, которого через месяц и сам, блядь, боишься трогать. Чих-пых тебя в сраку, делай красиво!