Sobes.tech
Back to questions
Intern
13

Пример DIP ```go package main import "fmt" // Интерфейс для абстракции хранения данных type DataStorage interface { Save(data string) } // Низкоуровневый модуль для хранения данных в файле ```

Companies where asked
Adapty

Answer from AI

sobes.tech AI

Продолжим пример реализации принципа инверсии зависимостей (DIP) на Go.

package main

import "fmt"

// Интерфейс для абстракции хранения данных
// type DataStorage interface {
//     Save(data string)
// }

// Низкоуровневый модуль для хранения данных в файле
type FileStorage struct {
    filename string
}

func (fs *FileStorage) Save(data string) {
    // Здесь могла бы быть логика записи в файл
    fmt.Printf("Сохраняем данные '%s' в файл %s\n", data, fs.filename)
}

// Высокоуровневый модуль, который зависит от абстракции, а не от конкретной реализации
type DataProcessor struct {
    storage DataStorage
}

func (dp *DataProcessor) Process(data string) {
    // Некоторая обработка данных
    processedData := data + "_processed"
    dp.storage.Save(processedData)
}

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

    processor.Process("example data")
}

Здесь DataProcessor зависит от интерфейса DataStorage, а не от конкретной реализации FileStorage. Это позволяет легко менять способ хранения данных, не меняя логику обработки.