Назад к вопросам
Intern
12
Пример DIP ```go package main import "fmt" // Интерфейс для абстракции хранения данных type DataStorage interface { Save(data string) } // Низкоуровневый модуль для хранения данных в файле ```
Компании, где спрашивали
Adapty
Ответ от нейросети
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. Это позволяет легко менять способ хранения данных, не меняя логику обработки.