Table-Driven Design
Jadval asosidagi dizayn
"Professional Go Testing" kursida jadval asosidagi testlarni, "Table-Driven Logic" darsida esa jadval asosidagi oddiy mantiqni ko'rgan edingiz. Endi shu g'oyani butun dastur arxitekturasi darajasida qo'llaymiz: turli muhit yoki holat uchun kod filiallari (if/switch) yozish o'rniga, ma'lumotni bitta markazlashtirilgan jadvalga jamlash.
Buni restoran menyusiga o'xshating: har safar mijoz kelganda oshpaz "agar mijoz shu narsani so'rasa, unda..." deb o'ylab o'tirmaydi — menyu allaqachon jadval ko'rinishida tayyor, va oshpaz unga qarab ishlaydi. Yangi taom qo'shish uchun oshpazning "mantig'i"ni emas, faqat menyu jadvalini o'zgartirish kifoya.
package main
import "fmt"
type Config struct {
MaxRetries int
Timeout int
}
// Jadval: har bir muhit uchun sozlamalar bir joyda
var environments = map[string]Config{
"dev": {MaxRetries: 1, Timeout: 5},
"prod": {MaxRetries: 5, Timeout: 30},
}
func LoadConfig(env string) Config {
return environments[env]
}
func main() {
cfg := LoadConfig("prod")
fmt.Println(cfg.MaxRetries, cfg.Timeout)
}Agar buni if env == "dev" { ... } else if env == "prod" { ... } ko'rinishida yozganingizda edi, yangi muhit (masalan "staging") qo'shish uchun kodning mantiq qismini o'zgartirish kerak bo'lardi. Jadval yondashuvida esa yangi muhit qo'shish — shunchaki environments xaritasiga bitta qator qo'shish, LoadConfig funksiyasining o'zi hech qachon o'zgarmaydi.
Bu naqsh ayniqsa konfiguratsiya, marshrutlash qoidalari, xato kodlari kabi "ma'lumot ko'p, mantiq kam" holatlarda kuchli: mantiqni bir marta to'g'ri yozib qo'yasiz, keyin faqat jadvalni to'ldirib borasiz.
>_ Exercise
HTTP status kodlariga mos foydalanuvchi xabarlarini jadval orqali boshqaring.
- •statusMessages xaritasini yarating: 200->"OK", 404->"topilmadi", 500->"server xatosi"
- •MessageFor(code int) string funksiyasini yozing: xaritadan topib qaytarsin, topilmasa "noma'lum holat" qaytarsin
- •MessageFor(404) va MessageFor(999) natijalarini chop eting
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Jadval asosidagi dizaynda ma'lumot (sozlama, qoida) va mantiq ajratiladi — yangi holat qo'shish uchun mantiqni emas, faqat jadvalni o'zgartirasiz.
NEXT UP
Worker Pool Pattern
$ go run main.go
Kodingizni ishga tushiring