Skip to content

Instantly share code, notes, and snippets.

@reetasingh
Created May 2, 2023 07:00
Show Gist options
  • Save reetasingh/6c21ebaeb9dd6448c607457341124df3 to your computer and use it in GitHub Desktop.
Save reetasingh/6c21ebaeb9dd6448c607457341124df3 to your computer and use it in GitHub Desktop.
loose coupling without interfaces example
package main
import "fmt"
type Person struct {
ID int
Name string
}
type PersonDB interface {
Save(person *Person) error
}
type Database struct {
// Database connection and operations
}
func (db *Database) Save(person *Person) error {
// Implementation for saving a person to the database
fmt.Printf("Saving person: %+v\n", person)
return nil
}
type PersonService interface {
CreatePerson(person *Person) error
}
type PersonServiceImpl struct {
db PersonDB
}
func (s *PersonServiceImpl) CreatePerson(person *Person) error {
// Business logic for creating a person
err := s.db.Save(person)
if err != nil {
return err
}
return nil
}
func main() {
db := &Database{}
service := &PersonServiceImpl{db: db}
person := &Person{
ID: 101,
Name: "John D",
}
err := service.CreatePerson(person)
if err != nil {
fmt.Println("Error:", err)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment