Feature-Sliced Design: mahiyyəti, funksiyalara bölmə metodologiyası

Müəllif: IT Sectr Dərc olunub: 2026-02-20 Oxuma vaxtı: 12 dəq

Biz Feature-Sliced Design nə olduğunu izah edirik — layihənin texniki təbəqələrə deyil, biznes funksiyalarına görə bölünməsinə əsaslanan modul frontend arxitektura metodologiyası. Klassik təbəqəli arxitekturadan (kontrollerlər, servislər, repozitoriyalar) fərqli olaraq, FSD kodu tətbiqin funksional imkanlarına görə qruplaşdırır: hər bir funksiya öz məntiqi, interfeysi və məlumatlarını ehtiva edir. State of Frontend 2024 sorğusunun məlumatlarına görə, FSD React tərtibatçılarının 23%-i tərəfindən əsas arxitektura metodologiyası kimi istifadə olunur ki, bu da onu təmiz Feature-based strukturundan sonra ikinci ən populyar edir.

Əsas məqamlar

  • Feature-Sliced Design (FSD) — kodu biznes funksiyalarına (slayslara) görə qruplaşdıran metodologiya, hər biri UI, məntiq, API və testləri əhatə edir.
  • FSD-nin standart strukturu 7 təbəqədən ibarətdir: app, processes, pages, features, entities, shared, widgets — hər biri ciddi idxal qaydaları ilə.
  • FSD-nin əsas qaydası — «təbəqələr yalnız aşağı baxır»: features təbəqəsi entities-i idxal edə bilər, əksinə yox.
  • FSD-nin üstünlükləri: funksiyaların izolyasiyası, slaysların layihələr arasında təkrar istifadəsi, konfliktsiz paralel inkişaf.
  • Əsas çatışmazlıq — kiçik layihələr üçün həddindən artıq iç-içəlik: FSD 10+ tərtibatçı və 20+ ekran olduqda əsaslandırılır.

Feature-Sliced Design nədir?

Feature-Sliced Design (FSD) — ilk dəfə 2021-ci ildə feature-sliced.design icması tərəfindən təklif edilən frontend tətbiqlərinin arxitektura metodologiyası. FSD-nin əsas ideyası kodu biznes funksiyalarına (slayslara) görə qruplaşdırmaqdır, hər biri öz-özünə kifayət edən vahiddir: öz biznes məntiqi, istifadəçi interfeysi, API işi, məlumat modelləri və testləri ehtiva edir. Bu, FSD-ni kodu texniki əlamətə görə bölən klassik təbəqəli arxitekturadan (controller, service, repository) fərqləndirir.

Metodologiya Domain-Driven Design (DDD) və Bounded Context konsepsiyalarını mənimsəyir: tətbiqin hər bir funksiyası aydın sərhədləri olan ayrıca bounded context-dir. Bir funksiya daxilindəki dəyişikliklər, yalnız slaysın ictimai API-indən istifadə edirlərsə, digər funksiyaları pozmamalıdır. State of Frontend 2024 sorğusunun məlumatlarına görə, FSD React arxitekturaları arasında populyarlıq baxımından ikinci yerdədir (23%), yalnız qeyri-rəsmi Feature-based strukturundan (31%) geri qalır.

Mobil inkişafda FSD Android modullarının və iOS freymvorklarının xüsusiyyətlərinə uyğunlaşdırılır. IT Sectr-də biz FSD-ni 10+ ekran və 3+ komandası olan layihələr üçün istifadə edirik — metodologiya funksiyaları müstəqil inkişaf etdirməyə imkan verir və slays sərhədləri olmayan monorepozitoriya ilə müqayisədə git-də konfliktlərin sayını 40% azaldır.

FSD-nin yeddi təbəqəsi: struktur və idxal qaydaları

FSD yeddi iyerarxik təbəqə müəyyən edir, hər biri müəyyən abstraksiya səviyyəsində kod ehtiva edir. Əsas arxitektura qaydası — təbəqələr yalnız aşağı təbəqələrdən kodu idxal edə bilər. Bu qaydanın pozulması (features təbəqəsinin entities-də idxalı) arxitektura səhvi hesab olunur və linter tərəfindən bloklanır.

TəbəqəTəyinatİdxal edir
appTətbiqin işə salınması, provayderlər, qlobal stillər, marşrutlaşdırmaİstənilən təbəqələr
processesBir neçə funksiyanı birləşdirən biznes prosesləri (onboardinq, ödəniş)pages, features, entities, shared
pagesSəhifədə funksiyaların kompozisiyası, səhifə marşrutlaşdırmasıfeatures, entities, shared
featuresİstifadəçi ssenariləri: giriş forması, sevimlilər siyahısı, axtarış filtrientities, shared
entitiesBiznes varlıqları: User, Product, Order, Cartshared
widgetsUI kompozisiya komponentləri: Header, Sidebar, ArticleCardshared, entities
sharedKöməkçi alətlər, UI-kit, API-klient, konfiqlər — biznes məntiqindən asılı olmayanYalnız xarici kitabxanalar

FSD layihəsinin kataloq strukturunun nümunəsi:

Mətn
src/
├── app/                    // Tətbiq təbəqəsi
│   ├── providers/
│   ├── router/
│   └── styles/
├── pages/                   // Səhifələr — funksiyaların kompozisiyası
│   └── main/
├── features/                // Funksiyalar — istifadəçi ssenariləri
│   ├── auth/                // Slays «Avtorizasiya»
│   │   ├── ui/
│   │   ├── model/
│   │   └── api/
│   └── productList/         // Slays «Məhsul siyahısı»
│       ├── ui/
│       └── model/
├── entities/                // Biznes varlıqları
│   ├── user/
│   └── product/
├── widgets/                 // Kompozisiya komponentləri
│   └── header/
└── shared/                  // Ümumi köməkçi alətlər və UI-kit
    └── ui/

«Təbəqələr yalnız aşağı baxır» qaydası — FSD-nin təməl daşı. Əgər auth funksiyası user varlığını idxal edirsə — bu düzgündür. Əgər user varlığı auth funksiyasını idxal etməyə başlayırsa — bu tsiklik asılılıq və izolyasiyanın pozulmasıdır. Qaydaya riayət olunmasını təmin etmək üçün ESLint plaginlərindən (eslint-plugin-fsd) və ya slaysların ictimai API-si üçün öz linterlərindən istifadə olunur.

Slayslar: biznes domenlərinin sərhədləri

Slays (slice) — FSD-də bir biznes funksiyasına və ya varlığa uyğun gələn əsas qruplaşdırma vahidi. Hər bir slays yeddi təbəqədən birinin (features, entities, widgets, pages) daxilində yerləşir və konkret funksionallığı həyata keçirmək üçün tam kod dəstini ehtiva edir: UI komponentləri, məlumat modeli, API-klient, sabitlər və testlər.

Slaysların sərhədləri biznes domeni ilə müəyyən edilir: auth funksiyası avtorizasiya ilə bağlı hər şeyi əhatə edir (giriş forması, qeydiyyat forması, şifrənin sıfırlanması); user varlığı User modelini, UserRepository və serializasiyanı əhatə edir. Sərhədlər kəsişməməlidir: əgər auth funksiyasına istifadəçi haqqında məlumat lazımdırsa — o, user varlığını idxal edir, məntiqi kopyalamır. Mobil inkişafda FSD slaysı tez-tez Android-də Gradle moduluna və ya iOS-da Swift paketinə uyğun gəlir.

Slayslar ciddi şəkildə izolyasiya olunub: bir slaysın daxili strukturu digər slayslar üçün görünməzdir. Slayslar arasında qarşılıqlı əlaqə üçün ictimai API istifadə olunur — yalnız kənardan istifadəyə icazə veriləni ixrac edən index.ts/index.js faylı. Qalan hər şey özəl modullardır. Bu yanaşma təsadüfi asılılıqların qarşısını alır və refaktorinqi asanlaşdırır: bir slaysın özəl tətbiqinin dəyişdirilməsi digər slayslara təsir göstərmir.

Seqmentlər: slays daxilində UI, API, Model, Lib

Hər bir FSD slaysı daxilində kod əlavə olaraq seqmentlər üzrə təşkil olunur — bütün slayslarda təkrarlanan texniki kateqoriyalar. Standart seqment dəsti ui (interfeys komponentləri), model (biznes məntiqi, Store, Actions, Reducer), api (server sorğuları, mutasiyalar), lib (köməkçi alətlər və helperlər) və config (funksiya konfiqurasiyası) daxildir.

SeqmentMəzmunNümunə
ui/React/Vue/SwiftUI komponentləri, stillər, StorybookLoginForm.tsx, login.module.css
model/Store, Reducer, Actions, tiplər, kontraktlarLoginStore.ts, authReducer.ts
api/HTTP-klientlər, mutasiyalar, RPC çağırışlarıauthApi.ts, loginMutation.ts
lib/Köməkçi funksiyalar, validatorlarvalidateEmail.ts, formatPhone.ts
config/Sabitlər, funksiya konfiqurasiyasıauthConfig.ts, endpoints.ts

Seqmentlər tövsiyədir, ciddi qayda deyil. Slays kiçikdirsə, seqmentlər birləşdirilə bilər. Böyük slayslar üçün (10+ faylı olan funksiya) seqmentasiya məcburidir — onsuz daxili struktur tez bir zamanda 50 fayllı «səbət»ə çevrilir, burada lazımi komponenti tapmaq dəqiqələr çəkir. Mobil inkişafda seqmentlər tez-tez fayl strukturunun növə görə təşkili ilə əvəz olunur: hər bir funksiya ayrıca Swift faylı və ya daxili tipləri olan Kotlin sinfi.

Mobil inkişafda FSD: Android və iOS-a uyğunlaşma

Mobil inkişafda FSD platforma xüsusiyyətlərinə — Android-in modul strukturuna (Gradle modulları) və Swift Package Manager-ə uyğunlaşdırılır. Android uyğunlaşması hər bir slaysın öz build.gradle faylı olan ayrıca Gradle modulu olduğunu nəzərdə tutur. feature-auth, feature-profile, entity-user, shared-ui modulları kompilyasiya səviyyəsində bir-birindən izolyasiya olunub: əgər dependencies-də göstərilməyibsə, feature-auth feature-profile-i idxal edə bilməz.

iOS uyğunlaşması Swift Package Manager-ə əsaslanır: hər bir slays ictimai API-si olan Swift paketidir. TCA layihələrində feature.auth slaysı öz Reducer, Store, View və API-klientini ehtiva edir. Swift Community Survey 2024 məlumatlarına görə, TCA ilə iOS layihələrinin 28%-i FSD-yə yaxın olan slays arxitekturasından istifadə edir.

Mobil FSD uyğunlaşmasının əsas problemi — shared təbəqəsinin təkrarlanmasıdır. Mobil inkişafda UI komponentləri (shared/ui) tez-tez platformadan asılıdır (Android Views vs Jetpack Compose vs SwiftUI), bu da hər bir texnologiya üçün ayrıca shared modulları tələb edir. FSD-də shared təbəqəsi adətən platformadan asılı deyil (köməkçi alətlər, konfiqlər), UI-kit isə ayrıca modula və ya komponentlər kitabxanasına çıxarılır.

Feature-Sliced Design-ın müsbət və mənfi cəhətləri

Üstünlüklər FSD 10+ tərtibatçısı olan böyük layihələrdə nəzərə çarpır. Hər bir tərtibatçı və ya komanda öz slaysı ilə məşğul olur, başqalarının koduna toxunmadan. Git-də konfliktlər 40–60% azalır (feature-sliced.design case studies məlumatları). Yeni funksiyalar, yalnız slaysların ictimai API-indən istifadə edərlərsə, mövcud olanları sındırmaq riski olmadan əlavə edilir. Bir funksiyanın refaktorinqi digərlərinin dəyişdirilməsini tələb etmir — ictimai API-ni saxlayaraq bir slays daxilində ui/model/api-ni yenidən yazmaq kifayətdir.

AspektFSDFeature-based (FSD-siz)Təbəqəli arxitektura
Funksiyaların izolyasiyasıCiddiOrtaAşağı
Paralel inkişaf10+ komanda3–5 komanda1–2 komanda
Layihələr arasında təkrar istifadəBəli (slays-paketlər)Yalnız copy-paste iləShared modullar vasitəsilə
Giriş həddiYüksəkAşağıOrta
Gradle izolyasiyası (Android)Natativ (modullar)Natativ (modullar)Zəif

Çatışmazlıqlar FSD — kiçik layihələr üçün həddindən artıq iç-içəlik. Tətbiq 3–5 ekrandan ibarətdirsə, yeddi təbəqə və hər bir slays daxilində seqmentasiya tətbiqin özündən daha çox təşkilati kod yaradır. Giriş həddi yüksəkdir: yeni tərtibatçılar metodologiyanı mənimsəmək üçün 2–4 həftə sərf edirlər. Həmçinin FSD sürətli prototipləşdirmə ilə zəif uyğunlaşır — prototip FSD-də qadağan olunan və iterasiyaları yavaşladan tez-tez cross-layer idxalları tələb edir.

Daha sadə Feature-based strukturu ilə başlamaq və ekranların sayı 20-ni, komanda isə 5 tərtibatçını keçdikdə FSD-yə miqrasiya etmək tövsiyə olunur.

Tez-tez verilən suallar

FSD və Feature-based arxitekturası arasında nə fərq var?

Feature-based arxitekturası kodu funksiyalara görə ciddi idxal qaydaları olmadan qruplaşdırır — Auth funksiyası məhdudiyyətsiz başqa Profile funksiyasını idxal edə bilər. FSD təbəqələr iyerarxiyası və «təbəqələr yalnız aşağı baxır» qaydasını əlavə edir. Feature-based-də entity və feature eyni səviyyədə ola bilər və bir-birini idxal edə bilər; FSD-də entity feature-dan aşağıda yerləşir və feature entity-ni idxal edir, əksinə yox. Feature-based kiçik layihələr üçün uyğundur, FSD — böyük layihələr üçün.

İzolyasiya olunmuş slaysı necə test etmək olar?

Slaysların izolyasiyası modul testini asanlaşdırır — hər bir slays aşağı təbəqələrin asılılıqlarını əvəz etməklə müstəqil test edilir. Auth funksiyası üçün user varlığını mock etmək kifayətdir. İnteqrasiya testləri slaysın ictimai API-sini yoxlayır. Android Gradle modulunda funksiya Reducer, API-klient və UI testləri (Compose Test vasitəsilə) ilə öz test kataloqunu ehtiva edir. iOS-da slays-paket bütün seqmentlərin testlərini əhatə edir.

FSD-ni Jetpack Compose ilə istifadə etmək olar?

Bəli, FSD Jetpack Compose ilə yaxşı uyğunlaşır, xüsusən çoxmodullu Android layihələrində. Hər bir slays exported direktivi vasitəsilə ictimai API-si olan ayrıca Gradle moduludur. Features təbəqəsi Composable funksiyaları (LoginFeature, ProductListFeature), entities təbəqəsi — data sinifləri və Repository, shared — UI-kit (MaterialTheme-wrapper, fərdi komponentlər) ehtiva edir. FSD 5+ tərtibatçısı olan böyük Compose layihələri üçün tövsiyə olunur.

Hansı təbəqələr məcburi, hansılar isteğe bağlıdır?

Məcburi təbəqələr — app, shared, entities və features. Qalanları (processes, pages, widgets) isteğe bağlıdır və zərurət olduqda əlavə edilir. Mobil inkişafda pages təbəqəsi tez-tez naviqasiya marşrutlaşdırması ilə birləşdirilir, widgets isə shared/ui-kit ilə əvəz olunur. Proseslər (processes) adətən mobil layihələrdə istifadə edilmir — onların rolunu domain təbəqəsi və ya ViewModel-də biznes məntiqi yerinə yetirir. Əsas odur ki, idxal iyerarxiyası qaydasına riayət olunsun.

FSD Domain-Driven Design ilə necə əlaqəlidir?

FSD DDD-dən Bounded ContextUbiquitous Language konsepsiyalarını mənimsəyir. Hər bir slays bounded context-ə uyğun gəlir — daxilində terminlərin birmənalı məna daşıdığı sərhəd. Slays daxilində həm tərtibatçılar, həm də biznes analitiklər üçün başa düşülən vahid dil (ubiquitous language) istifadə olunur. Məsələn, auth slaysında «login», «şifrə», «token» terminləri komandanın bütün üzvləri üçün eyni məna daşıyır ki, bu da analitiklər və tərtibatçılar arasında anlaşılmazlıqların sayını 30–50% azaldır.

Nəticə

  • Feature-Sliced Design (FSD) — kodu biznes funksiyalarına (slayslara) görə qruplaşdıran modul arxitektura metodologiyası, hər biri UI, məntiq, API və testləri ehtiva edir.
  • FSD-nin yeddi təbəqəsi: app, processes, pages, features, entities, widgets, shared — yuxarıdan aşağıya ciddi idxal qaydası ilə.
  • Slayslar ictimai API vasitəsilə izolyasiya olunub — daxili struktur digər slayslar üçün görünməzdir, bu da tsiklik asılılıqların qarşısını alır.
  • Slays daxilində seqmentlər (ui, model, api, lib, config) kodu texniki əlamətə görə təşkil edir, lakin kiçik slayslar üçün məcburi deyil.
  • Mobil inkişafda FSD Gradle modulları (Android) və Swift paketləri (iOS) vasitəsilə uyğunlaşdırılır, kompilyasiya səviyyəsində izolyasiyanı təmin edir.
  • Əsas üstünlüklər — paralel inkişaf, funksiyaların izolyasiyası, layihələr arasında təkrar istifadə.
  • Əsas çatışmazlıqlar — kiçik layihələr üçün həddindən artıqlıq, yüksək giriş həddi, sürətli prototipləşdirmə ilə uyğunsuzluq.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun