Skip to main content

Repository Pattern

Repository pattern encapsulates data access logic.

Design Purpose

  • Decoupling: Separate business logic and data access
  • Testing: Easy unit testing
  • Extension: Support multiple data sources

Interface Definition

type ClusterRepository interface {
Create(ctx context.Context, cluster *model.PveCluster) error
FindByID(ctx context.Context, id int64) (*model.PveCluster, error)
FindAll(ctx context.Context) ([]*model.PveCluster, error)
Update(ctx context.Context, cluster *model.PveCluster) error
Delete(ctx context.Context, id int64) error
}

Implementation

GORM Implementation

Use GORM to implement Repository:

type clusterRepository struct {
db *gorm.DB
}

func (r *clusterRepository) Create(ctx context.Context, cluster *model.PveCluster) error {
return r.db.WithContext(ctx).Create(cluster).Error
}

Advantages

  • Unified Interface: Unified data access interface
  • Easy Testing: Can be easily mocked
  • Flexible Extension: Supports multiple data sources