搜索

PythonReactSEOPDF
GitHub Skill

kratos-biz-layer

Generates business logic layer components (use cases, repository interfaces, business models, validators) for go-kratos microservices following Clean Architecture. Use when implementing domain logic, creating entity CRUD operations, adding validation rules, or orchestrating data access in kratos services.

alecszaharia☆ 0 仓库 Stars0 仓库 Forks

安装与使用

请根据来源仓库和你的 AI 工具说明安装此技能。先阅读技能文件和依赖要求,再添加到工作流。

查看来源 ↗使用指南

技能说明

<essential_principles>

How Kratos Business Layer Works

Clean Architecture Dependency Rule

The business layer (biz) is the core of Clean Architecture in Kratos microservices:

Dependency Flow: Service → Biz → Data

  • Biz defines interfaces that data layer implements
  • Biz contains business logic independent of frameworks
  • Biz uses domain models not ORM entities

Domain-Driven Structure (Current Pattern)

The biz layer follows domain-driven design with these subdirectories:

1. Domain Layer (internal/biz/domain/)

  • models.go - Domain entities with validation tags
  • interfaces.go - Repository, use case, and event publisher interfaces
  • errors.go - Domain errors (ErrSymbolNotFound) and data layer errors (ErrDataNotFound)

2. Use Case Layer (internal/biz/{entity}/)

  • usecase.go - Use case implementation
  • usecase_test.go - Use case tests with event assertions
  • validator.go - Validation logic factory

3. Event Layer (internal/biz/event/) - Optional

  • mapper.go - Event payload transformations
  • topics.go - Event topic constants

4. Provider (internal/biz/provider.go)

  • Wire ProviderSet for dependency injection

Error Separation Pattern

Data Layer Errors (returned by repositories):

  • domain.ErrDataNotFound - Record not found
  • domain.ErrDataDuplicateEntry - Unique constraint violation
  • domain.ErrDataDatabase - Generic database error

Domain Errors (returned by use cases):

  • domain.ErrSymbolNotFound - Symbol not found (business error)
  • domain.ErrDuplicateSymbol - Duplicate symbol (business error)
  • domain.ErrDatabaseOperation - Database operation failed

Pattern: Repositories return data errors, use cases map to domain errors via toDomainError() helper.

Event Publishing Pattern

Use cases integrate event publishing for domain events:

  • Accept domain.{Entity}EventPublisher interface
  • Publish events within transactions
  • Transaction rolls back if publishing fails

Example:

err := uc.tm.InTx(ctx, func(ctx context.Context) error {
    symbol, err = uc.repo.Create(ctx, s)
    if err != nil {
        return err
    }
    return uc.pub.PublishSymbolCreated(ctx, symbol)
})

Wire Dependency Injection

All constructors must be added to ProviderSet in internal/biz/provider.go:

var ProviderSet = wire.NewSet(symbol.NewValidator, symbol.NewUseCase)

After changes, run make generate to regenerate Wire code. </essential_principles>

  1. Create a new entity (use case + interface + model + validator)
  2. Add methods to existing use case
  3. Create standalone validator
  4. View examples and patterns

Wait for response before proceeding.

After reading the workflow, follow it exactly.

<reference_index> All domain knowledge in references/:

Core Patterns: use-case-pattern.md, interface-pattern.md, model-pattern.md Code Style: naming-conventions.md

Additional patterns (error handling, logging, transactions, testing) are covered within use-case-pattern.md. </reference_index>

<workflows_index>

Workflow Purpose
create-entity.md Generate complete biz layer for new entity
add-methods.md Add CRUD methods to existing use case
create-validator.md Create standalone validator
view-examples.md Show patterns and examples
</workflows_index>

<success_criteria> Business layer code is correct when:

Structure:

  • Domain models in internal/biz/domain/models.go
  • Interfaces in internal/biz/domain/interfaces.go
  • Errors in internal/biz/domain/errors.go
  • Use case in internal/biz/{entity}/usecase.go
  • Validator in internal/biz/{entity}/validator.go
  • Tests in internal/biz/{entity}/usecase_test.go

Use Case Implementation:

  • Struct has repo, pub, log, validator, tm fields
  • Constructor returns interface type (domain.{Entity}UseCase)
  • Methods accept context.Context as first parameter
  • Validation happens before repository calls
  • Data errors mapped to domain errors via toDomainError()
  • Events published within transactions
  • All errors logged with context

Domain Layer:

  • Repository interface in domain/interfaces.go
  • Event publisher interface in domain/interfaces.go (if events)
  • Business model in domain/models.go with validation tags
  • Domain errors (ErrSymbolNotFound) separated from data errors (ErrDataNotFound)

Wire Integration:

  • Constructor added to ProviderSet in internal/biz/provider.go
  • User reminded to run make generate </success_criteria>

使用示例

查看来源仓库中的使用示例与配置说明。

查看来源 ↗

来源历史

收录时间
2026-01-20
索引更新时间
2026-01-26
Branch
main

收录与同步日期属于本站记录。源码修改历史请查看来源仓库。

GitHub ↗

chat Comments (0)

chat_bubble_outline

No comments yet. Be the first to share your thoughts!