Files
mayfly-go/docs/server/application.md

52 lines
1.2 KiB
Markdown
Raw Normal View History

---
trigger: always_on
---
# Application 层规范
## 接口与实现
```go
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)
}
```
## 错误处理
```go
// 普通业务错误
return errorx.NewBiz("数据库名称已存在")
// 国际化错误
return errorx.NewBizI(ctx, imsg.ErrDbNameExist)
```
## 边界
-**Always**: 参数校验后返回 error禁止 panic
- 🚫 **Never**: 在 application 层使用 `biz.ErrIsNil``biz.IsTrue`