Sobes.tech
Intern

DIP misoli ```go package main import "fmt" // Ma'lumotlarni saqlash uchun interfeys type DataStorage interface { Save(data string) } // Faylga ma'lumotlarni saqlash uchun pastki darajadagi modul ```

sobes.tech AI

AIdan javob

Go tilida bog'lanishlarni teskari aylantirish (DIP) prinsipini amalga oshirish misoliga davom etamiz.

package main

import "fmt"

// Ma'lumotlarni saqlash uchun abstraktsiya interfeysi
// type DataStorage interface {
//     Save(data string)
// }

// Faylga ma'lumotlarni saqlash uchun pastki darajadagi modul
type FileStorage struct {
    filename string
}

func (fs *FileStorage) Save(data string) {
    // Bu yerda faylga yozish logikasi bo'lishi mumkin
    fmt.Printf("Ma'lumot '%s' faylga %s saqlanmoqda\n", data, fs.filename)
}

// Yuqori darajadagi modul, u abstraktsiyaga, ya'ni konkret amalga oshirishga bog'liq emas
type DataProcessor struct {
    storage DataStorage
}

func (dp *DataProcessor) Process(data string) {
    // Ma'lumotlarni qayta ishlash
    processedData := data + "_processed"
    dp.storage.Save(processedData)
}

func main() {
    fileStorage := &FileStorage{filename: "data.txt"}
    processor := &DataProcessor{storage: fileStorage}

    processor.Process("misol ma'lumot")
}

Bu yerda DataProcessor DataStorage interfeksiga, ya'ni FileStorage ning konkret amalga oshirishiga bog'liq emas. Bu esa ma'lumotlarni saqlash usulini o'zgartirishni, ishlov berish logikasini o'zgartirmasdan, oson qilish imkonini beradi.