Files
mayfly-go/docs/server/application.md
2026-05-08 20:45:13 +08:00

1.2 KiB
Raw Blame History

trigger
trigger
always_on

Application 层规范

接口与实现

type Db interface {
    base.App[*entity.Db]
    GetPageList(condition *entity.DbQuery, orderBy ...string) (*model.PageResult[*entity.DbListPO], error)
    SaveDb(ctx context.Context, entity *entity.Db) error
}

type dbAppImpl struct {
    base.AppImpl[*entity.Db, repository.Db]
    dbInstanceApp Instance       `inject:"T"`
    tagApp        tagapp.TagTree `inject:"T"`
}
var _ Db = (*dbAppImpl)(nil)

func (d *dbAppImpl) SaveDb(ctx context.Context, dbEntity *entity.Db) error {
    // 1. 参数校验返回error
    if dbEntity.Name == "" {
        return errorx.NewBiz("名称不能为空")
    }
    // 2. 业务检查
    oldDb := &entity.Db{Name: dbEntity.Name, InstanceId: dbEntity.InstanceId}
    if dbEntity.Id == 0 && d.GetByCond(oldDb) == nil {
        return errorx.NewBizI(ctx, imsg.ErrDbNameExist)
    }
    // 3. 持久化
    return d.Save(ctx, dbEntity)
}

错误处理

// 普通业务错误
return errorx.NewBiz("数据库名称已存在")

// 国际化错误
return errorx.NewBizI(ctx, imsg.ErrDbNameExist)

边界

  • Always: 参数校验后返回 error禁止 panic
  • 🚫 Never: 在 application 层使用 biz.ErrIsNilbiz.IsTrue