What Crosses the Boundary
Chegaradan nima o'tadi
Decompose an Image Upload Service darsida komponentlarni nomladik va ularning bog'liqligini belgiladik. Endi muhim savol: ikkita komponent orasida aynan nima uzatiladi? Bu — Interfaces & Polymorphism kursidagi "interfeys — shartnoma" g'oyasining kodga tushishdan oldingi ko'rinishi.
Validator komponentini oling. Uni chaqiradigan Uploader bilan orasidagi chegarani aniq belgilash kerak: Validatorga nima kiradi (xom fayl baytlarimi? fayl nomi ham keraKmi?), va undan nima chiqadi (faqat true/false? yoki xato sababi haqida batafsil xabar ham)?
| Savol | Yomon chegara | Yaxshi chegara |
|---|---|---|
| Validator nimani qabul qiladi? | Butun HTTP so'rovini (r *http.Request) | Faqat fayl baytlari va nomi |
| Validator nimani qaytaradi? | Faqat bool (nega rad etilgani noma'lum) | error — sababini o'z ichiga oladigan |
"Yomon chegara" ustunidagi variant — Validatorga butun HTTP so'rovini berish — uni HTTP bilan bog'lab qo'yadi: endi uni HTTP'siz muhitda (masalan, fayl orqali yuklashda) qayta ishlatib bo'lmaydi. "Yaxshi chegara" esa Validatorni HTTP haqida umuman bilmaydigan, mustaqil qismga aylantiradi — bu Packages & Organization kursidagi "paketlar orasidagi aniq, tor interfeys" g'oyasining aynan o'zi.
Chegaradan kam narsa o'tishi odatda ko'p narsa o'tishidan yaxshiroq: komponentga faqat unga kerakli minimal ma'lumotni bering, u sizga faqat chaqiruvchiga kerakli minimal ma'lumotni qaytarsin. Bu komponentni sinash, tushunish va boshqa kontekstda qayta ishlatishni osonlashtiradi.
Key Takeaway
Key Takeaway:
Ikkita komponent orasidagi chegarani belgilaganda, "aynan nima kiradi, aynan nima chiqadi"ni aniq qiling. Komponentga kerakidan ortiq ma'lumot (masalan, butun HTTP so'rovi) berish uni keraksiz tarzda boshqa qismlarga bog'lab qo'yadi.
NEXT UP
Where Does It Belong?