Sobes.tech
Intern

Exemplo DIP ```go package main import "fmt" // Interface para abstração de armazenamento de dados type DataStorage interface { Save(data string) } // Módulo de baixo nível para armazenamento de dados em ficheiro ```

sobes.tech IA

Resposta da IA

Vamos continuar com um exemplo de implementação do princípio da inversão de dependências (DIP) em Go.

package main

import "fmt"

// Interface para abstração do armazenamento de dados
// type DataStorage interface {
//     Save(data string)
// }

// Módulo de baixo nível para armazenamento de dados em arquivo
type FileStorage struct {
    filename string
}

func (fs *FileStorage) Save(data string) {
    // Aqui poderia estar a lógica de gravação no arquivo
    fmt.Printf("A guardar dados '%s' no ficheiro %s\n", data, fs.filename)
}

// Módulo de alto nível que depende da abstração, não da implementação concreta
type DataProcessor struct {
    storage DataStorage
}

func (dp *DataProcessor) Process(data string) {
    // Processamento de dados
    processedData := data + "_processed"
    dp.storage.Save(processedData)
}

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

    processor.Process("exemplo de dados")
}

Aqui, DataProcessor depende da interface DataStorage, não da implementação concreta FileStorage. Isto permite alterar facilmente a forma de armazenamento de dados sem modificar a lógica de processamento.