GoDasturchi
Package by Feature, Not Layer

Package by Feature, Not Layer

Qatlam emas, xususiyat bo'yicha paketlang

Loyihani papkalarga bo'lishning ikkita keng tarqalgan usuli bor: qatlam bo'yicha (handlers/, services/, repositories/) va xususiyat bo'yicha (orders/, users/, payments/). Go jamoasi ko'pincha ikkinchisini tavsiya qiladi.

papka-tuzilmasi.txt
// Qatlam bo'yicha (layer-based) — har bir o'zgarish 3 papkaga tarqaladi:
handlers/
  order_handler.go
  user_handler.go
services/
  order_service.go
  user_service.go
repositories/
  order_repo.go
  user_repo.go

// Xususiyat bo'yicha (feature-based) — hamma narsa bitta joyda:
orders/
  handler.go
  service.go
  repository.go
users/
  handler.go
  service.go
  repository.go

Xususiyat bo'yicha tashkillashtirishning foydasi: "buyurtmalar bilan bog'liq hamma narsa qayerda?" degan savolga javob — bitta papka. Qatlam bo'yicha tashkillashtirilganda esa, bitta xususiyatni tushunish uchun uch xil papka orasida sakrash kerak bo'ladi. Bundan tashqari, xususiyat bo'yicha bo'lingan paketlar odatda bir-biriga kamroq bog'liq bo'ladi — bu esa "Packages & Organization" kursida ko'rgan aylanma bog'liqlik (import cycle) muammosining oldini ham oladi.

O'zingizni sinab ko'ring

Savol: Sizda Product bilan bog'liq handler, service va validatsiya kodi bor. Xususiyat bo'yicha tashkillashtirishda bularning barchasi qayerda joylashadi?

Javob: Bittagina product/ (yoki products/) papkasida — product/handler.go, product/service.go, product/validate.go ko'rinishida. Hech biri handlers/, services/ kabi umumiy, texnik qatlam papkalariga tarqalmaydi.

Key Takeaway

Key Takeaway:

Kodni texnik qatlam (handler/service/repo) emas, biznes xususiyati (orders/users/payments) bo'yicha guruhlang — shunda bitta xususiyatga tegishli hamma narsa bir joyda bo'ladi.

NEXT UP

Avoid Package Stutter

Package by Feature, Not Layer

Qatlam emas, xususiyat bo'yicha paketlang

Loyihani papkalarga bo'lishning ikkita keng tarqalgan usuli bor: qatlam bo'yicha (handlers/, services/, repositories/) va xususiyat bo'yicha (orders/, users/, payments/). Go jamoasi ko'pincha ikkinchisini tavsiya qiladi.

papka-tuzilmasi.txt
// Qatlam bo'yicha (layer-based) — har bir o'zgarish 3 papkaga tarqaladi:
handlers/
  order_handler.go
  user_handler.go
services/
  order_service.go
  user_service.go
repositories/
  order_repo.go
  user_repo.go

// Xususiyat bo'yicha (feature-based) — hamma narsa bitta joyda:
orders/
  handler.go
  service.go
  repository.go
users/
  handler.go
  service.go
  repository.go

Xususiyat bo'yicha tashkillashtirishning foydasi: "buyurtmalar bilan bog'liq hamma narsa qayerda?" degan savolga javob — bitta papka. Qatlam bo'yicha tashkillashtirilganda esa, bitta xususiyatni tushunish uchun uch xil papka orasida sakrash kerak bo'ladi. Bundan tashqari, xususiyat bo'yicha bo'lingan paketlar odatda bir-biriga kamroq bog'liq bo'ladi — bu esa "Packages & Organization" kursida ko'rgan aylanma bog'liqlik (import cycle) muammosining oldini ham oladi.

O'zingizni sinab ko'ring

Savol: Sizda Product bilan bog'liq handler, service va validatsiya kodi bor. Xususiyat bo'yicha tashkillashtirishda bularning barchasi qayerda joylashadi?

Javob: Bittagina product/ (yoki products/) papkasida — product/handler.go, product/service.go, product/validate.go ko'rinishida. Hech biri handlers/, services/ kabi umumiy, texnik qatlam papkalariga tarqalmaydi.

Key Takeaway

Key Takeaway:

Kodni texnik qatlam (handler/service/repo) emas, biznes xususiyati (orders/users/payments) bo'yicha guruhlang — shunda bitta xususiyatga tegishli hamma narsa bir joyda bo'ladi.

NEXT UP

Avoid Package Stutter