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.
// 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.goXususiyat 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