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