GoDasturchi
One Package, One Purpose

One Package, One Purpose

Bitta paket, bitta maqsad

"utils", "helpers", "common" nomli paketlar — deyarli har bir loyihada uchraydi, lekin ular yaxshi belgi emas. Bunday nomlar "bu paket nima qiladi?" degan savolga hech qanday javob bermaydi — u "hammasi va hech narsa" degani.

papka-tuzilmasi.txt
// Yomon: "utils" paketi vaqt o'tishi bilan chalkash "axlat qutisi"ga aylanadi
utils/
  string_utils.go   // matn funksiyalari
  date_utils.go      // sana funksiyalari
  http_utils.go       // HTTP funksiyalari
  db_utils.go          // baza funksiyalari
  // ... 6 oydan keyin bu yerda 40 ta bog'liq bo'lmagan funksiya bo'ladi

// Yaxshi: har bir paket bitta aniq maqsadga ega
stringutil/
  transform.go
dateutil/
  format.go
httputil/
  middleware.go

"utils" paketining muammosi — u vaqt o'tishi bilan hamma narsani jalb qiladi, chunki "buni qayerga qo'yishni bilmayman" degan har qanday kod uchun oson javob bo'lib qoladi. Natijada u boshqa deyarli barcha paketlar bilan bog'liq bo'lib qoladi (hamma narsa uni import qiladi), bu esa loyihani qayta tashkillashtirishni qiyinlashtiradi. Har bir paket bitta jumla bilan ta'riflana olishi kerak: "bu paket matnlarni formatlaydi", "bu paket sana bilan ishlaydi" — agar ta'rif "bu paket turli narsalar bilan ishlaydi" bo'lib qolsa, uni bo'lish vaqti kelgan.

O'zingizni sinab ko'ring

Savol: Loyihangizda utils.FormatDate(), utils.HashPassword() va utils.ParseCSV() funksiyalari bor. Ularni qanday qayta tashkillashtirasiz?

Javob: Uchta alohida paketga: dateutil.Format(), auth.HashPassword() (yoki security.Hash()), csvutil.Parse() — har biri o'z aniq maqsadi bilan, "utils" degan umumiy nom ostida yashirilmagan holda.

Key Takeaway

Key Takeaway:

"utils"/"helpers" kabi umumiy nomli paketlardan saqlaning — har bir paket bitta aniq, bir jumla bilan ta'riflanadigan maqsadga ega bo'lsin.

NEXT UP

Documentation Comments

One Package, One Purpose

Bitta paket, bitta maqsad

"utils", "helpers", "common" nomli paketlar — deyarli har bir loyihada uchraydi, lekin ular yaxshi belgi emas. Bunday nomlar "bu paket nima qiladi?" degan savolga hech qanday javob bermaydi — u "hammasi va hech narsa" degani.

papka-tuzilmasi.txt
// Yomon: "utils" paketi vaqt o'tishi bilan chalkash "axlat qutisi"ga aylanadi
utils/
  string_utils.go   // matn funksiyalari
  date_utils.go      // sana funksiyalari
  http_utils.go       // HTTP funksiyalari
  db_utils.go          // baza funksiyalari
  // ... 6 oydan keyin bu yerda 40 ta bog'liq bo'lmagan funksiya bo'ladi

// Yaxshi: har bir paket bitta aniq maqsadga ega
stringutil/
  transform.go
dateutil/
  format.go
httputil/
  middleware.go

"utils" paketining muammosi — u vaqt o'tishi bilan hamma narsani jalb qiladi, chunki "buni qayerga qo'yishni bilmayman" degan har qanday kod uchun oson javob bo'lib qoladi. Natijada u boshqa deyarli barcha paketlar bilan bog'liq bo'lib qoladi (hamma narsa uni import qiladi), bu esa loyihani qayta tashkillashtirishni qiyinlashtiradi. Har bir paket bitta jumla bilan ta'riflana olishi kerak: "bu paket matnlarni formatlaydi", "bu paket sana bilan ishlaydi" — agar ta'rif "bu paket turli narsalar bilan ishlaydi" bo'lib qolsa, uni bo'lish vaqti kelgan.

O'zingizni sinab ko'ring

Savol: Loyihangizda utils.FormatDate(), utils.HashPassword() va utils.ParseCSV() funksiyalari bor. Ularni qanday qayta tashkillashtirasiz?

Javob: Uchta alohida paketga: dateutil.Format(), auth.HashPassword() (yoki security.Hash()), csvutil.Parse() — har biri o'z aniq maqsadi bilan, "utils" degan umumiy nom ostida yashirilmagan holda.

Key Takeaway

Key Takeaway:

"utils"/"helpers" kabi umumiy nomli paketlardan saqlaning — har bir paket bitta aniq, bir jumla bilan ta'riflanadigan maqsadga ega bo'lsin.

NEXT UP

Documentation Comments