Skip to main content

Service Layer Design

The Service layer is responsible for business logic processing.

Design Principles

Single Responsibility

Each Service is responsible for only one business domain:

  • UserService: User management
  • ClusterService: Cluster management
  • VMService: Virtual machine management

Dependency Injection

Uses dependency injection to manage Service dependencies:

type ClusterService struct {
repo repository.ClusterRepository
proxmox *proxmox.Client
}

Interface Abstraction

Define interfaces for easy testing and extension:

type ClusterService interface {
CreateCluster(ctx context.Context, req *CreateClusterRequest) (*Cluster, error)
GetCluster(ctx context.Context, id int64) (*Cluster, error)
}

Business Logic

Data Validation

Perform business rule validation in the Service layer:

  • Parameter validation
  • Business rule checking
  • Permission verification

Data Transformation

Transform data returned by Repository into business objects:

  • DTO conversion
  • Data aggregation
  • Format processing

Transaction Management

Manage transactions in the Service layer:

  • Database transactions
  • Distributed transactions
  • Compensation mechanism