Browse Source

简化接口

yjp 1 year ago
parent
commit
cf4bc7e835
29 changed files with 397 additions and 340 deletions
  1. 4 0
      convenient/domain/configuration/entity.go
  2. 12 11
      convenient/entity/service.go
  3. 9 9
      convenient/entity/service_callbacks.go
  4. 21 23
      convenient/entity/simple.go
  5. 62 12
      convenient/relation/many2many/simple.go
  6. 3 3
      convenient/relation/one2many/simple.go
  7. 12 11
      convenient/relation/one2one/service.go
  8. 22 29
      convenient/relation/one2one/simple.go
  9. 3 3
      convenient/relation/remote/simple.go
  10. 6 5
      convenient/value_object/service.go
  11. 9 9
      convenient/value_object/service_callbacks.go
  12. 2 1
      convenient/value_object/simple.go
  13. 3 11
      examples/examples/project/application/domain/class/entity.go
  14. 0 101
      examples/examples/project/application/domain/configuration/entity.go
  15. 101 0
      examples/examples/project/application/domain/configuration/value_object.go
  16. 3 11
      examples/examples/project/application/domain/family/entity.go
  17. 3 11
      examples/examples/project/application/domain/student/entity.go
  18. 0 2
      examples/examples/project/application/service/class.go
  19. 0 2
      examples/examples/project/application/service/family.go
  20. 0 2
      examples/examples/project/application/service/student.go
  21. 0 4
      examples/examples/project/application/service/student_and_family.go
  22. 0 53
      framwork/domain/entity.go
  23. 24 0
      framwork/domain/entity/base.go
  24. 32 0
      framwork/domain/entity/entity.go
  25. 1 19
      framwork/domain/entity/field.go
  26. 36 0
      framwork/domain/entity/utils.go
  27. 0 8
      framwork/domain/value_object.go
  28. 18 0
      framwork/domain/value_object/utils.go
  29. 11 0
      framwork/domain/value_object/value_object.go

+ 4 - 0
convenient/domain/configuration/entity.go

@@ -31,6 +31,10 @@ func (e *Entity) DomainCNName() string {
 	return "配置"
 }
 
+func (e *Entity) DomainCamelName() string {
+	return "Configuration"
+}
+
 func (e *Entity) CheckKeyFields() error {
 	err := e.checkFieldScope()
 	if err != nil {

+ 12 - 11
convenient/entity/service.go

@@ -6,6 +6,7 @@ import (
 	"git.sxidc.com/go-framework/baize/convenient/binding/response"
 	"git.sxidc.com/go-framework/baize/framwork/api"
 	"git.sxidc.com/go-framework/baize/framwork/domain"
+	"git.sxidc.com/go-framework/baize/framwork/domain/entity"
 	"git.sxidc.com/go-framework/baize/framwork/infrastructure"
 	"git.sxidc.com/go-framework/baize/framwork/infrastructure/database"
 	"git.sxidc.com/go-framework/baize/framwork/infrastructure/database/sql"
@@ -24,7 +25,7 @@ func Create(tableName string, callbacks *Callbacks[string]) binding.ServiceFunc[
 
 		dbExecutor := i.DBExecutor()
 
-		e, ok := objects[0].(domain.Entity)
+		e, ok := objects[0].(entity.Entity)
 		if !ok {
 			return "", fserr.New("需要传递领域对象应该为实体")
 		}
@@ -71,7 +72,7 @@ func Delete(tableName string, callbacks *Callbacks[any]) binding.ServiceFunc[any
 
 		dbExecutor := i.DBExecutor()
 
-		e, ok := objects[0].(domain.Entity)
+		e, ok := objects[0].(entity.Entity)
 		if !ok {
 			return nil, fserr.New("需要传递领域对象应该为实体")
 		}
@@ -109,7 +110,7 @@ func Update(tableName string, callbacks *Callbacks[any]) binding.ServiceFunc[any
 
 		dbExecutor := i.DBExecutor()
 
-		e, ok := objects[0].(domain.Entity)
+		e, ok := objects[0].(entity.Entity)
 		if !ok {
 			return nil, fserr.New("需要传递领域对象应该为实体")
 		}
@@ -121,7 +122,7 @@ func Update(tableName string, callbacks *Callbacks[any]) binding.ServiceFunc[any
 
 		exist, err := database.CheckExist(dbExecutor, &sql.CheckExistExecuteParams{
 			TableName:  tableName,
-			Conditions: sql.NewConditions().Equal(domain.ColumnID, e.GetID()),
+			Conditions: sql.NewConditions().Equal(entity.ColumnID, e.GetID()),
 		})
 		if err != nil {
 			return callbackOnErrorReturn(callbacks, e, err, i, nil)
@@ -175,7 +176,7 @@ func Query[O any](tableName string, callbacks *Callbacks[response.InfosData[O]],
 			return errResponse, fserr.New("请求参数不是Query接口")
 		}
 
-		e, ok := objects[0].(domain.Entity)
+		e, ok := objects[0].(entity.Entity)
 		if !ok {
 			return errResponse, fserr.New("需要传递领域对象应该为实体")
 		}
@@ -248,7 +249,7 @@ func GetByID[O any](tableName string, callbacks *Callbacks[O]) binding.ServiceFu
 
 		dbExecutor := i.DBExecutor()
 
-		e, ok := objects[0].(domain.Entity)
+		e, ok := objects[0].(entity.Entity)
 		if !ok {
 			return outputZero, fserr.New("需要传递领域对象应该为实体")
 		}
@@ -265,7 +266,7 @@ func GetByID[O any](tableName string, callbacks *Callbacks[O]) binding.ServiceFu
 
 		result, err := database.QueryOne(dbExecutor, &sql.QueryOneExecuteParams{
 			TableName:  tableName,
-			Conditions: sql.NewConditions().Equal(domain.ColumnID, e.GetID()),
+			Conditions: sql.NewConditions().Equal(entity.ColumnID, e.GetID()),
 		})
 		if err != nil {
 			return callbackOnErrorReturn(callbacks, e, err, i, outputZero)
@@ -302,7 +303,7 @@ func CreateTx(tableName string, callbacks *Callbacks[string]) binding.ServiceFun
 
 		dbExecutor := i.DBExecutor()
 
-		e, ok := objects[0].(domain.Entity)
+		e, ok := objects[0].(entity.Entity)
 		if !ok {
 			return "", fserr.New("需要传递领域对象应该为实体")
 		}
@@ -356,7 +357,7 @@ func DeleteTx(tableName string, callbacks *Callbacks[any]) binding.ServiceFunc[a
 
 		dbExecutor := i.DBExecutor()
 
-		e, ok := objects[0].(domain.Entity)
+		e, ok := objects[0].(entity.Entity)
 		if !ok {
 			return nil, fserr.New("需要传递领域对象应该为实体")
 		}
@@ -401,7 +402,7 @@ func UpdateTx(tableName string, callbacks *Callbacks[any]) binding.ServiceFunc[a
 
 		dbExecutor := i.DBExecutor()
 
-		e, ok := objects[0].(domain.Entity)
+		e, ok := objects[0].(entity.Entity)
 		if !ok {
 			return nil, fserr.New("需要传递领域对象应该为实体")
 		}
@@ -413,7 +414,7 @@ func UpdateTx(tableName string, callbacks *Callbacks[any]) binding.ServiceFunc[a
 
 		exist, err := database.CheckExist(dbExecutor, &sql.CheckExistExecuteParams{
 			TableName:  tableName,
-			Conditions: sql.NewConditions().Equal(domain.ColumnID, e.GetID()),
+			Conditions: sql.NewConditions().Equal(entity.ColumnID, e.GetID()),
 		})
 		if err != nil {
 			return callbackOnErrorReturn(callbacks, e, err, i, nil)

+ 9 - 9
convenient/entity/service_callbacks.go

@@ -1,19 +1,19 @@
 package entity
 
 import (
-	"git.sxidc.com/go-framework/baize/framwork/domain"
+	"git.sxidc.com/go-framework/baize/framwork/domain/entity"
 	"git.sxidc.com/go-framework/baize/framwork/infrastructure"
 	"git.sxidc.com/go-framework/baize/framwork/infrastructure/database"
 )
 
 type Callbacks[O any] struct {
-	BeforeDBOperate func(e domain.Entity, i *infrastructure.Infrastructure, dbExecutor database.Executor) error
-	AfterDBOperate  func(e domain.Entity, i *infrastructure.Infrastructure, dbExecutor database.Executor) error
-	OnSuccessReturn func(e domain.Entity, i *infrastructure.Infrastructure, output O) (O, error)
-	OnErrorReturn   func(e domain.Entity, err error, i *infrastructure.Infrastructure, defaultErrOutput O) (O, error)
+	BeforeDBOperate func(e entity.Entity, i *infrastructure.Infrastructure, dbExecutor database.Executor) error
+	AfterDBOperate  func(e entity.Entity, i *infrastructure.Infrastructure, dbExecutor database.Executor) error
+	OnSuccessReturn func(e entity.Entity, i *infrastructure.Infrastructure, output O) (O, error)
+	OnErrorReturn   func(e entity.Entity, err error, i *infrastructure.Infrastructure, defaultErrOutput O) (O, error)
 }
 
-func callbackBeforeDBOperate[O any](callbacks *Callbacks[O], e domain.Entity, i *infrastructure.Infrastructure, dbExecutor database.Executor) error {
+func callbackBeforeDBOperate[O any](callbacks *Callbacks[O], e entity.Entity, i *infrastructure.Infrastructure, dbExecutor database.Executor) error {
 	if callbacks == nil {
 		return nil
 	}
@@ -25,7 +25,7 @@ func callbackBeforeDBOperate[O any](callbacks *Callbacks[O], e domain.Entity, i
 	return nil
 }
 
-func callbackAfterDBOperate[O any](callbacks *Callbacks[O], e domain.Entity, i *infrastructure.Infrastructure, dbExecutor database.Executor) error {
+func callbackAfterDBOperate[O any](callbacks *Callbacks[O], e entity.Entity, i *infrastructure.Infrastructure, dbExecutor database.Executor) error {
 	if callbacks == nil {
 		return nil
 	}
@@ -37,7 +37,7 @@ func callbackAfterDBOperate[O any](callbacks *Callbacks[O], e domain.Entity, i *
 	return nil
 }
 
-func callbackOnSuccessReturn[O any](callbacks *Callbacks[O], e domain.Entity, i *infrastructure.Infrastructure, output O) (O, error) {
+func callbackOnSuccessReturn[O any](callbacks *Callbacks[O], e entity.Entity, i *infrastructure.Infrastructure, output O) (O, error) {
 	if callbacks == nil {
 		return output, nil
 	}
@@ -49,7 +49,7 @@ func callbackOnSuccessReturn[O any](callbacks *Callbacks[O], e domain.Entity, i
 	return output, nil
 }
 
-func callbackOnErrorReturn[O any](callbacks *Callbacks[O], e domain.Entity, err error, i *infrastructure.Infrastructure, defaultErrOutput O) (O, error) {
+func callbackOnErrorReturn[O any](callbacks *Callbacks[O], e entity.Entity, err error, i *infrastructure.Infrastructure, defaultErrOutput O) (O, error) {
 	if callbacks == nil {
 		return defaultErrOutput, err
 	}

+ 21 - 23
convenient/entity/simple.go

@@ -6,19 +6,14 @@ import (
 	"git.sxidc.com/go-framework/baize/convenient/binding/response"
 	"git.sxidc.com/go-framework/baize/framwork/api"
 	"git.sxidc.com/go-framework/baize/framwork/domain"
+	"git.sxidc.com/go-framework/baize/framwork/domain/entity"
 )
 
 // Simple 实体CRUD的Bind参数
 // I 为查询相关接口返回的Info类型
 type Simple[I any] struct {
 	// 使用的领域实体,注意是Entity类型
-	Entity domain.Entity
-
-	// 表名
-	TableName string
-
-	// URL领域相对路径,如/class,后面会自动补充,如/class/create
-	DomainPath string
+	Entity entity.Entity
 
 	// 创建使用的请求参数
 	CreateJsonBody request.Params
@@ -42,23 +37,26 @@ type Simple[I any] struct {
 func (simple *Simple[I]) bind(binder *binding.Binder) {
 	options := simple.options
 
+	tableName := entity.TableName(simple.Entity)
+	domainPath := entity.RelativeDomainPath(simple.Entity)
+
 	// 创建
 	if !options.disableCreate {
 		if !options.createNeedTx {
 			binding.PostBind(binder, &binding.SimpleBindItem[string]{
-				Path:          simple.DomainPath + "/create",
+				Path:          domainPath + "/create",
 				ResponseFunc:  response.SendIDResponse[string],
 				RequestParams: simple.CreateJsonBody,
 				Objects:       []domain.Object{simple.Entity},
-				ServiceFunc:   Create(simple.TableName, options.createCallbacks),
+				ServiceFunc:   Create(tableName, options.createCallbacks),
 			}, options.createMiddlewares...)
 		} else {
 			binding.PostBind(binder, &binding.SimpleBindItem[string]{
-				Path:          simple.DomainPath + "/create",
+				Path:          domainPath + "/create",
 				ResponseFunc:  response.SendIDResponse[string],
 				RequestParams: simple.CreateJsonBody,
 				Objects:       []domain.Object{simple.Entity},
-				ServiceFunc:   CreateTx(simple.TableName, options.createCallbacks),
+				ServiceFunc:   CreateTx(tableName, options.createCallbacks),
 			}, options.createMiddlewares...)
 		}
 	}
@@ -67,19 +65,19 @@ func (simple *Simple[I]) bind(binder *binding.Binder) {
 	if !options.disableDelete {
 		if !options.deleteNeedTx {
 			binding.DeleteBind(binder, &binding.SimpleBindItem[any]{
-				Path:          simple.DomainPath + "/:id/delete",
+				Path:          domainPath + "/:id/delete",
 				ResponseFunc:  response.SendMsgResponse,
 				RequestParams: simple.DeleteQueryParams,
 				Objects:       []domain.Object{simple.Entity},
-				ServiceFunc:   Delete(simple.TableName, options.deleteCallbacks),
+				ServiceFunc:   Delete(tableName, options.deleteCallbacks),
 			}, options.deleteMiddlewares...)
 		} else {
 			binding.DeleteBind(binder, &binding.SimpleBindItem[any]{
-				Path:          simple.DomainPath + "/:id/delete",
+				Path:          domainPath + "/:id/delete",
 				ResponseFunc:  response.SendMsgResponse,
 				RequestParams: simple.DeleteQueryParams,
 				Objects:       []domain.Object{simple.Entity},
-				ServiceFunc:   DeleteTx(simple.TableName, options.deleteCallbacks),
+				ServiceFunc:   DeleteTx(tableName, options.deleteCallbacks),
 			}, options.deleteMiddlewares...)
 		}
 	}
@@ -88,19 +86,19 @@ func (simple *Simple[I]) bind(binder *binding.Binder) {
 	if !options.disableUpdate {
 		if !options.updateNeedTx {
 			binding.PutBind(binder, &binding.SimpleBindItem[any]{
-				Path:          simple.DomainPath + "/update",
+				Path:          domainPath + "/update",
 				ResponseFunc:  response.SendMsgResponse,
 				RequestParams: simple.UpdateJsonBody,
 				Objects:       []domain.Object{simple.Entity},
-				ServiceFunc:   Update(simple.TableName, options.updateCallbacks),
+				ServiceFunc:   Update(tableName, options.updateCallbacks),
 			}, options.updateMiddlewares...)
 		} else {
 			binding.PutBind(binder, &binding.SimpleBindItem[any]{
-				Path:          simple.DomainPath + "/update",
+				Path:          domainPath + "/update",
 				ResponseFunc:  response.SendMsgResponse,
 				RequestParams: simple.UpdateJsonBody,
 				Objects:       []domain.Object{simple.Entity},
-				ServiceFunc:   UpdateTx(simple.TableName, options.updateCallbacks),
+				ServiceFunc:   UpdateTx(tableName, options.updateCallbacks),
 			}, options.updateMiddlewares...)
 		}
 	}
@@ -108,22 +106,22 @@ func (simple *Simple[I]) bind(binder *binding.Binder) {
 	// 查询
 	if !options.disableQuery {
 		binding.GetBind(binder, &binding.SimpleBindItem[response.InfosData[I]]{
-			Path:          simple.DomainPath + "/query",
+			Path:          domainPath + "/query",
 			ResponseFunc:  response.SendInfosResponse[I],
 			RequestParams: simple.QueryQueryParams,
 			Objects:       []domain.Object{simple.Entity},
-			ServiceFunc:   Query[I](simple.TableName, options.queryCallbacks, options.queryConditionFieldCallback),
+			ServiceFunc:   Query[I](tableName, options.queryCallbacks, options.queryConditionFieldCallback),
 		}, options.queryMiddlewares...)
 	}
 
 	// 通过ID获取
 	if !options.disableQueryByID {
 		binding.GetBind(binder, &binding.SimpleBindItem[I]{
-			Path:          simple.DomainPath + "/get",
+			Path:          domainPath + "/get",
 			ResponseFunc:  response.SendInfoResponse[I],
 			RequestParams: simple.GetByIDQueryParams,
 			Objects:       []domain.Object{simple.Entity},
-			ServiceFunc:   GetByID[I](simple.TableName, options.getByIDCallbacks),
+			ServiceFunc:   GetByID[I](tableName, options.getByIDCallbacks),
 		}, options.getByIDMiddlewares...)
 	}
 }

+ 62 - 12
convenient/relation/many2many/simple.go

@@ -1,9 +1,13 @@
 package many2many
 
 import (
+	"fmt"
 	"git.sxidc.com/go-framework/baize/convenient/binding"
 	"git.sxidc.com/go-framework/baize/convenient/binding/request"
+	"git.sxidc.com/go-framework/baize/convenient/binding/response"
 	"git.sxidc.com/go-framework/baize/framwork/domain"
+	"git.sxidc.com/go-framework/baize/framwork/domain/entity"
+	"github.com/iancoleman/strcase"
 )
 
 // Simple 关联的Bind参数
@@ -11,19 +15,10 @@ import (
 // RI 为右边实体的Info类型
 type Simple[LI any, RI any] struct {
 	// 左领域实体,注意是Entity类型
-	Left domain.Entity
+	Left entity.Entity
 
 	// 右领域实体,注意是Entity类型
-	Right domain.Entity
-
-	// 中间表表名
-	MiddleTableName string
-
-	// URL领域相对路径,如/person,后面会自动补充,如/user/右领域path/update
-	LeftDomainPath string
-
-	// URL领域相对路径,如/identity,后面会自动补充,如/userInfo/左领域path/update
-	RightDomainPath string
+	Right entity.Entity
 
 	// 更新左实体关联使用的请求参数
 	LeftUpdateJsonBody request.Params
@@ -42,8 +37,63 @@ type Simple[LI any, RI any] struct {
 }
 
 func (simple *Simple[LI, RI]) bind(binder *binding.Binder) {
-	//options := simple.options
+	options := simple.options
+
+	leftDomainPath := entity.RelativeDomainPath(simple.Left)
+	rightDomainPath := entity.RelativeDomainPath(simple.Right)
+
+	leftRelationFieldName := fmt.Sprintf("%sID", simple.Right.DomainCamelName())
+	rightRelationFieldName := fmt.Sprintf("%sID", simple.Left.DomainCamelName())
+	leftRelationColumnName := fmt.Sprintf("%s_id", strcase.ToSnake(simple.Right.DomainCamelName()))
+	rightRelationColumnName := fmt.Sprintf("%s_id", strcase.ToSnake(simple.Left.DomainCamelName()))
+
+	if !options.disableLeft {
+		if !options.disableLeftUpdate {
+			// 左到右更新
+			binding.PostBind(binder, &binding.SimpleBindItem[any]{
+				Path:          simple.LeftDomainPath + simple.RightDomainPath + "/update",
+				ResponseFunc:  response.SendMsgResponse,
+				RequestParams: simple.LeftUpdateJsonBody,
+				Objects:       []domain.Object{simple.Left},
+				ServiceFunc:   Update(),
+			})
+		}
+
+		if !options.disableLeftQuery {
+			// 左到右查询
+			binding.GetBind(binder, &binding.SimpleBindItem[RI]{
+				Path:          simple.LeftDomainPath + simple.RightDomainPath + "/query",
+				ResponseFunc:  response.SendInfoResponse[RI],
+				RequestParams: simple.LeftQueryQueryParams,
+				Objects:       []domain.Object{simple.Left},
+				ServiceFunc:   Query[RI](),
+			})
+		}
+	}
 
+	if !options.disableRight {
+		if !options.disableRightUpdate {
+			// 右到左更新
+			binding.PostBind(binder, &binding.SimpleBindItem[any]{
+				Path:          simple.RightDomainPath + simple.LeftDomainPath + "/update",
+				ResponseFunc:  response.SendMsgResponse,
+				RequestParams: simple.RightUpdateJsonBody,
+				Objects:       []domain.Object{simple.Right},
+				ServiceFunc:   Update(),
+			})
+		}
+
+		if !options.disableRightQuery {
+			// 右到左查询
+			binding.GetBind(binder, &binding.SimpleBindItem[RI]{
+				Path:          simple.RightDomainPath + simple.LeftDomainPath + "/query",
+				ResponseFunc:  response.SendInfoResponse[RI],
+				RequestParams: simple.RightQueryQueryParams,
+				Objects:       []domain.Object{simple.Right},
+				ServiceFunc:   Query[RI](),
+			})
+		}
+	}
 }
 
 func BindSimple[LI any, RI any](binder *binding.Binder, simple *Simple[LI, RI], opts ...Option) {

+ 3 - 3
convenient/relation/one2many/simple.go

@@ -3,7 +3,7 @@ package one2many
 import (
 	"git.sxidc.com/go-framework/baize/convenient/binding"
 	"git.sxidc.com/go-framework/baize/convenient/binding/request"
-	"git.sxidc.com/go-framework/baize/framwork/domain"
+	"git.sxidc.com/go-framework/baize/framwork/domain/entity"
 )
 
 // Simple 关联的Bind参数
@@ -11,10 +11,10 @@ import (
 // RI 为右边实体的Info类型
 type Simple[LI any, RI any] struct {
 	// 左领域实体,注意是Entity类型
-	Left domain.Entity
+	Left entity.Entity
 
 	// 右领域实体,注意是Entity类型
-	Right domain.Entity
+	Right entity.Entity
 
 	// 左表名
 	LeftTableName string

+ 12 - 11
convenient/relation/one2one/service.go

@@ -5,6 +5,7 @@ import (
 	"git.sxidc.com/go-framework/baize/convenient/binding/request"
 	"git.sxidc.com/go-framework/baize/framwork/api"
 	"git.sxidc.com/go-framework/baize/framwork/domain"
+	"git.sxidc.com/go-framework/baize/framwork/domain/entity"
 	"git.sxidc.com/go-framework/baize/framwork/infrastructure"
 	"git.sxidc.com/go-framework/baize/framwork/infrastructure/database"
 	"git.sxidc.com/go-framework/baize/framwork/infrastructure/database/sql"
@@ -23,7 +24,7 @@ func Update(fromTableName string, fromRelationFieldName string, fromRelationColu
 
 		dbExecutor := i.DBExecutor()
 
-		fromEntity, ok := object.(domain.Entity)
+		fromEntity, ok := object.(entity.Entity)
 		if !ok {
 			return nil, fserr.New("领域对象不是实体")
 		}
@@ -41,7 +42,7 @@ func Update(fromTableName string, fromRelationFieldName string, fromRelationColu
 		// from存在性校验
 		fromResult, err := database.QueryOne(dbExecutor, &sql.QueryOneExecuteParams{
 			TableName:  fromTableName,
-			Conditions: sql.NewConditions().Equal(domain.ColumnID, fromEntity.GetID()),
+			Conditions: sql.NewConditions().Equal(entity.ColumnID, fromEntity.GetID()),
 		})
 		if err != nil {
 			if database.IsErrorDBRecordNotExist(err) {
@@ -71,7 +72,7 @@ func Update(fromTableName string, fromRelationFieldName string, fromRelationColu
 			// to存在性校验
 			toExist, err := database.CheckExist(dbExecutor, &sql.CheckExistExecuteParams{
 				TableName:  toTableName,
-				Conditions: sql.NewConditions().Equal(domain.ColumnID, newToID),
+				Conditions: sql.NewConditions().Equal(entity.ColumnID, newToID),
 			})
 			if err != nil {
 				return nil, err
@@ -87,7 +88,7 @@ func Update(fromTableName string, fromRelationFieldName string, fromRelationColu
 				err := database.Update(tx, &sql.UpdateExecuteParams{
 					TableName:  fromTableName,
 					TableRow:   sql.NewTableRow().Add(fromRelationColumnName, newToID),
-					Conditions: sql.NewConditions().Equal(domain.ColumnID, fromEntity.GetID()),
+					Conditions: sql.NewConditions().Equal(entity.ColumnID, fromEntity.GetID()),
 				})
 				if err != nil {
 					return err
@@ -109,7 +110,7 @@ func Update(fromTableName string, fromRelationFieldName string, fromRelationColu
 				err := database.Update(tx, &sql.UpdateExecuteParams{
 					TableName:  toTableName,
 					TableRow:   sql.NewTableRow().Add(toRelationColumnName, familyID),
-					Conditions: sql.NewConditions().Equal(domain.ColumnID, updateToID),
+					Conditions: sql.NewConditions().Equal(entity.ColumnID, updateToID),
 				})
 				if err != nil {
 					return err
@@ -137,7 +138,7 @@ func Query[TI any](fromTableName string, toTableName string, toRelationColumnNam
 			return outputZero, fserr.New("领域实体为空")
 		}
 
-		fromEntity, ok := object.(domain.Entity)
+		fromEntity, ok := object.(entity.Entity)
 		if !ok {
 			return outputZero, fserr.New("领域对象不是实体")
 		}
@@ -145,7 +146,7 @@ func Query[TI any](fromTableName string, toTableName string, toRelationColumnNam
 		// from存在性校验
 		fromResult, err := database.QueryOne(dbExecutor, &sql.QueryOneExecuteParams{
 			TableName:  fromTableName,
-			Conditions: sql.NewConditions().Equal(domain.ColumnID, fromEntity.GetID()),
+			Conditions: sql.NewConditions().Equal(entity.ColumnID, fromEntity.GetID()),
 		})
 		if err != nil {
 			if database.IsErrorDBRecordNotExist(err) {
@@ -161,7 +162,7 @@ func Query[TI any](fromTableName string, toTableName string, toRelationColumnNam
 			return outputZero, err
 		}
 
-		existFromEntity := existFrom.(domain.Entity)
+		existFromEntity := existFrom.(entity.Entity)
 
 		toResult, err := database.QueryOne(dbExecutor, &sql.QueryOneExecuteParams{
 			TableName:  toTableName,
@@ -205,7 +206,7 @@ func QueryWithOtherInfo[FI any, TI any](fromTableName string, toTableName string
 			return zeroRetMap, fserr.New("领域实体为空")
 		}
 
-		fromEntity, ok := object.(domain.Entity)
+		fromEntity, ok := object.(entity.Entity)
 		if !ok {
 			return zeroRetMap, fserr.New("领域对象不是实体")
 		}
@@ -213,7 +214,7 @@ func QueryWithOtherInfo[FI any, TI any](fromTableName string, toTableName string
 		// from存在性校验
 		fromResult, err := database.QueryOne(dbExecutor, &sql.QueryOneExecuteParams{
 			TableName:  fromTableName,
-			Conditions: sql.NewConditions().Equal(domain.ColumnID, fromEntity.GetID()),
+			Conditions: sql.NewConditions().Equal(entity.ColumnID, fromEntity.GetID()),
 		})
 		if err != nil {
 			if database.IsErrorDBRecordNotExist(err) {
@@ -229,7 +230,7 @@ func QueryWithOtherInfo[FI any, TI any](fromTableName string, toTableName string
 			return zeroRetMap, err
 		}
 
-		existFromEntity := existFrom.(domain.Entity)
+		existFromEntity := existFrom.(entity.Entity)
 
 		toResult, err := database.QueryOne(dbExecutor, &sql.QueryOneExecuteParams{
 			TableName:  toTableName,

+ 22 - 29
convenient/relation/one2one/simple.go

@@ -6,6 +6,7 @@ import (
 	"git.sxidc.com/go-framework/baize/convenient/binding/request"
 	"git.sxidc.com/go-framework/baize/convenient/binding/response"
 	"git.sxidc.com/go-framework/baize/framwork/domain"
+	"git.sxidc.com/go-framework/baize/framwork/domain/entity"
 	"github.com/iancoleman/strcase"
 )
 
@@ -14,22 +15,10 @@ import (
 // RI 为右边实体的Info类型
 type Simple[LI any, RI any] struct {
 	// 左领域实体,注意是Entity类型
-	Left domain.Entity
+	Left entity.Entity
 
 	// 右领域实体,注意是Entity类型
-	Right domain.Entity
-
-	// 左表名,只存在单侧表,赋值空即可
-	LeftTableName string
-
-	// 右表名,只存在单侧表,赋值空即可
-	RightTableName string
-
-	// URL领域相对路径,如/user,后面会自动补充,如/user/右领域path/update
-	LeftDomainPath string
-
-	// URL领域相对路径,如/userInfo,后面会自动补充,如/userInfo/左领域path/update
-	RightDomainPath string
+	Right entity.Entity
 
 	// 更新左实体关联使用的请求参数
 	LeftUpdateJsonBody request.WithID
@@ -56,6 +45,11 @@ type Simple[LI any, RI any] struct {
 func (simple *Simple[LI, RI]) bind(binder *binding.Binder) {
 	options := simple.options
 
+	leftTableName := entity.TableName(simple.Left)
+	leftDomainPath := entity.RelativeDomainPath(simple.Left)
+	rightTableName := entity.TableName(simple.Right)
+	rightDomainPath := entity.RelativeDomainPath(simple.Right)
+
 	leftRelationFieldName := fmt.Sprintf("%sID", simple.Right.DomainCamelName())
 	rightRelationFieldName := fmt.Sprintf("%sID", simple.Left.DomainCamelName())
 	leftRelationColumnName := fmt.Sprintf("%s_id", strcase.ToSnake(simple.Right.DomainCamelName()))
@@ -65,34 +59,34 @@ func (simple *Simple[LI, RI]) bind(binder *binding.Binder) {
 		if !options.disableLeftUpdate {
 			// 左到右更新
 			binding.PostBind(binder, &binding.SimpleBindItem[any]{
-				Path:          simple.LeftDomainPath + simple.RightDomainPath + "/update",
+				Path:          leftDomainPath + rightDomainPath + "/update",
 				ResponseFunc:  response.SendMsgResponse,
 				RequestParams: simple.LeftUpdateJsonBody,
 				Objects:       []domain.Object{simple.Left},
-				ServiceFunc: Update(simple.LeftTableName, leftRelationFieldName, leftRelationColumnName,
-					simple.RightTableName, simple.Right.DomainCNName(), rightRelationColumnName),
+				ServiceFunc: Update(leftTableName, leftRelationFieldName, leftRelationColumnName,
+					rightTableName, simple.Right.DomainCNName(), rightRelationColumnName),
 			})
 		}
 
 		if !options.disableLeftQuery {
 			// 左到右查询
 			binding.GetBind(binder, &binding.SimpleBindItem[RI]{
-				Path:          simple.LeftDomainPath + simple.RightDomainPath + "/query",
+				Path:          leftDomainPath + rightDomainPath + "/query",
 				ResponseFunc:  response.SendInfoResponse[RI],
 				RequestParams: simple.LeftQueryQueryParams,
 				Objects:       []domain.Object{simple.Left},
-				ServiceFunc:   Query[RI](simple.LeftTableName, simple.RightTableName, rightRelationColumnName),
+				ServiceFunc:   Query[RI](leftTableName, rightTableName, rightRelationColumnName),
 			})
 		}
 
 		if !options.disableLeftWithRightQuery {
 			// 左到右查询,携带右方信息
 			binding.GetBind(binder, &binding.SimpleBindItem[map[string]any]{
-				Path:          simple.LeftDomainPath + simple.RightDomainPath + "/queryWith",
+				Path:          leftDomainPath + rightDomainPath + "/queryWith",
 				ResponseFunc:  response.SendMapResponse,
 				RequestParams: simple.LeftQueryWithRightQueryParams,
 				Objects:       []domain.Object{simple.Left},
-				ServiceFunc:   QueryWithOtherInfo[LI, RI](simple.LeftTableName, simple.RightTableName, rightRelationColumnName),
+				ServiceFunc:   QueryWithOtherInfo[LI, RI](leftTableName, rightTableName, rightRelationColumnName),
 			})
 		}
 	}
@@ -101,38 +95,37 @@ func (simple *Simple[LI, RI]) bind(binder *binding.Binder) {
 		if !options.disableRightUpdate {
 			// 右到左更新
 			binding.PostBind(binder, &binding.SimpleBindItem[any]{
-				Path:          simple.RightDomainPath + simple.LeftDomainPath + "/update",
+				Path:          rightDomainPath + leftDomainPath + "/update",
 				ResponseFunc:  response.SendMsgResponse,
 				RequestParams: simple.RightUpdateJsonBody,
 				Objects:       []domain.Object{simple.Right},
-				ServiceFunc: Update(simple.RightTableName, rightRelationFieldName, rightRelationColumnName,
-					simple.LeftTableName, simple.Left.DomainCNName(), leftRelationColumnName),
+				ServiceFunc: Update(rightTableName, rightRelationFieldName, rightRelationColumnName,
+					leftTableName, simple.Left.DomainCNName(), leftRelationColumnName),
 			})
 		}
 
 		if !options.disableRightQuery {
 			// 右到左查询
 			binding.GetBind(binder, &binding.SimpleBindItem[RI]{
-				Path:          simple.RightDomainPath + simple.LeftDomainPath + "/query",
+				Path:          rightDomainPath + leftDomainPath + "/query",
 				ResponseFunc:  response.SendInfoResponse[RI],
 				RequestParams: simple.RightQueryQueryParams,
 				Objects:       []domain.Object{simple.Right},
-				ServiceFunc:   Query[RI](simple.RightTableName, simple.LeftTableName, leftRelationColumnName),
+				ServiceFunc:   Query[RI](rightTableName, leftTableName, leftRelationColumnName),
 			})
 		}
 
 		if !options.disableRightWithLeftQuery {
 			// 右到左查询,携带左方信息
 			binding.GetBind(binder, &binding.SimpleBindItem[map[string]any]{
-				Path:          simple.RightDomainPath + simple.LeftDomainPath + "/queryWith",
+				Path:          rightDomainPath + leftDomainPath + "/queryWith",
 				ResponseFunc:  response.SendMapResponse,
 				RequestParams: simple.RightQueryWithLeftQueryParams,
 				Objects:       []domain.Object{simple.Right},
-				ServiceFunc:   QueryWithOtherInfo[RI, LI](simple.RightTableName, simple.LeftTableName, leftRelationColumnName),
+				ServiceFunc:   QueryWithOtherInfo[RI, LI](rightTableName, leftTableName, leftRelationColumnName),
 			})
 		}
 	}
-
 }
 
 func BindSimple[LI any, RI any](binder *binding.Binder, simple *Simple[LI, RI], opts ...Option) {

+ 3 - 3
convenient/relation/remote/simple.go

@@ -3,7 +3,7 @@ package many2many
 import (
 	"git.sxidc.com/go-framework/baize/convenient/binding"
 	"git.sxidc.com/go-framework/baize/convenient/binding/request"
-	"git.sxidc.com/go-framework/baize/framwork/domain"
+	"git.sxidc.com/go-framework/baize/framwork/domain/entity"
 )
 
 // Simple 关联的Bind参数
@@ -11,10 +11,10 @@ import (
 // RI 为右边实体的Info类型
 type Simple[LI any, RI any] struct {
 	// 左领域实体,注意是Entity类型
-	Left domain.Entity
+	Left entity.Entity
 
 	// 右领域实体,注意是Entity类型
-	Right domain.Entity
+	Right entity.Entity
 
 	// 左领域实体不是本地的
 	LeftRemote bool

+ 6 - 5
convenient/value_object/service.go

@@ -6,6 +6,7 @@ import (
 	"git.sxidc.com/go-framework/baize/convenient/binding/response"
 	"git.sxidc.com/go-framework/baize/framwork/api"
 	"git.sxidc.com/go-framework/baize/framwork/domain"
+	"git.sxidc.com/go-framework/baize/framwork/domain/value_object"
 	"git.sxidc.com/go-framework/baize/framwork/infrastructure"
 	"git.sxidc.com/go-framework/baize/framwork/infrastructure/database"
 	"git.sxidc.com/go-framework/baize/framwork/infrastructure/database/sql"
@@ -23,7 +24,7 @@ func Create(tableName string, callbacks *Callbacks[any]) binding.ServiceFunc[any
 
 		dbExecutor := i.DBExecutor()
 
-		valueObject, ok := objects[0].(domain.ValueObject)
+		valueObject, ok := objects[0].(value_object.ValueObject)
 		if !ok {
 			return nil, fserr.New("需要传递领域对象应该为值对象")
 		}
@@ -65,7 +66,7 @@ func Delete(tableName string, callbacks *Callbacks[any]) binding.ServiceFunc[any
 
 		dbExecutor := i.DBExecutor()
 
-		valueObject, ok := objects[0].(domain.ValueObject)
+		valueObject, ok := objects[0].(value_object.ValueObject)
 		if !ok {
 			return nil, fserr.New("需要传递领域对象应该为值对象")
 		}
@@ -118,7 +119,7 @@ func Query[O any](tableName string, callbacks *Callbacks[response.InfosData[O]],
 			return errResponse, fserr.New("请求参数不是Query接口")
 		}
 
-		valueObject, ok := objects[0].(domain.ValueObject)
+		valueObject, ok := objects[0].(value_object.ValueObject)
 		if !ok {
 			return errResponse, fserr.New("需要传递领域对象应该为值对象")
 		}
@@ -184,7 +185,7 @@ func CreateTx(tableName string, callbacks *Callbacks[any]) binding.ServiceFunc[a
 	return func(c *api.Context, params request.Params, objects []domain.Object, i *infrastructure.Infrastructure) (any, error) {
 		dbExecutor := i.DBExecutor()
 
-		valueObject, ok := objects[0].(domain.ValueObject)
+		valueObject, ok := objects[0].(value_object.ValueObject)
 		if !ok {
 			return nil, fserr.New("需要传递领域对象应该为值对象")
 		}
@@ -223,7 +224,7 @@ func DeleteTx(tableName string, callbacks *Callbacks[any]) binding.ServiceFunc[a
 	return func(c *api.Context, params request.Params, objects []domain.Object, i *infrastructure.Infrastructure) (any, error) {
 		dbExecutor := i.DBExecutor()
 
-		valueObject, ok := objects[0].(domain.ValueObject)
+		valueObject, ok := objects[0].(value_object.ValueObject)
 		if !ok {
 			return nil, fserr.New("需要传递领域对象应该为值对象")
 		}

+ 9 - 9
convenient/value_object/service_callbacks.go

@@ -1,19 +1,19 @@
 package value_object
 
 import (
-	"git.sxidc.com/go-framework/baize/framwork/domain"
+	"git.sxidc.com/go-framework/baize/framwork/domain/value_object"
 	"git.sxidc.com/go-framework/baize/framwork/infrastructure"
 	"git.sxidc.com/go-framework/baize/framwork/infrastructure/database"
 )
 
 type Callbacks[O any] struct {
-	BeforeDBOperate func(valueObject domain.ValueObject, i *infrastructure.Infrastructure, dbExecutor database.Executor) error
-	AfterDBOperate  func(valueObject domain.ValueObject, i *infrastructure.Infrastructure, dbExecutor database.Executor) error
-	OnSuccessReturn func(valueObject domain.ValueObject, i *infrastructure.Infrastructure, output O) (O, error)
-	OnErrorReturn   func(valueObject domain.ValueObject, err error, i *infrastructure.Infrastructure, defaultErrOutput O) (O, error)
+	BeforeDBOperate func(valueObject value_object.ValueObject, i *infrastructure.Infrastructure, dbExecutor database.Executor) error
+	AfterDBOperate  func(valueObject value_object.ValueObject, i *infrastructure.Infrastructure, dbExecutor database.Executor) error
+	OnSuccessReturn func(valueObject value_object.ValueObject, i *infrastructure.Infrastructure, output O) (O, error)
+	OnErrorReturn   func(valueObject value_object.ValueObject, err error, i *infrastructure.Infrastructure, defaultErrOutput O) (O, error)
 }
 
-func callbackBeforeDBOperate[O any](callbacks *Callbacks[O], valueObject domain.ValueObject, i *infrastructure.Infrastructure, dbExecutor database.Executor) error {
+func callbackBeforeDBOperate[O any](callbacks *Callbacks[O], valueObject value_object.ValueObject, i *infrastructure.Infrastructure, dbExecutor database.Executor) error {
 	if callbacks == nil {
 		return nil
 	}
@@ -25,7 +25,7 @@ func callbackBeforeDBOperate[O any](callbacks *Callbacks[O], valueObject domain.
 	return nil
 }
 
-func callbackAfterDBOperate[O any](callbacks *Callbacks[O], valueObject domain.ValueObject, i *infrastructure.Infrastructure, dbExecutor database.Executor) error {
+func callbackAfterDBOperate[O any](callbacks *Callbacks[O], valueObject value_object.ValueObject, i *infrastructure.Infrastructure, dbExecutor database.Executor) error {
 	if callbacks == nil {
 		return nil
 	}
@@ -37,7 +37,7 @@ func callbackAfterDBOperate[O any](callbacks *Callbacks[O], valueObject domain.V
 	return nil
 }
 
-func callbackOnSuccessReturn[O any](callbacks *Callbacks[O], valueObject domain.ValueObject, i *infrastructure.Infrastructure, output O) (O, error) {
+func callbackOnSuccessReturn[O any](callbacks *Callbacks[O], valueObject value_object.ValueObject, i *infrastructure.Infrastructure, output O) (O, error) {
 	if callbacks == nil {
 		return output, nil
 	}
@@ -49,7 +49,7 @@ func callbackOnSuccessReturn[O any](callbacks *Callbacks[O], valueObject domain.
 	return output, nil
 }
 
-func callbackOnErrorReturn[O any](callbacks *Callbacks[O], valueObject domain.ValueObject, err error, i *infrastructure.Infrastructure, defaultErrOutput O) (O, error) {
+func callbackOnErrorReturn[O any](callbacks *Callbacks[O], valueObject value_object.ValueObject, err error, i *infrastructure.Infrastructure, defaultErrOutput O) (O, error) {
 	if callbacks == nil {
 		return defaultErrOutput, err
 	}

+ 2 - 1
convenient/value_object/simple.go

@@ -6,13 +6,14 @@ import (
 	"git.sxidc.com/go-framework/baize/convenient/binding/response"
 	"git.sxidc.com/go-framework/baize/framwork/api"
 	"git.sxidc.com/go-framework/baize/framwork/domain"
+	"git.sxidc.com/go-framework/baize/framwork/domain/value_object"
 )
 
 // Simple 值对象CRD的Bind参数
 // I 为查询相关接口返回的Info类型
 type Simple[I any] struct {
 	// 使用的领域实体,注意是ValueObject类型
-	ValueObject domain.ValueObject
+	ValueObject value_object.ValueObject
 
 	// 表名
 	TableName string

+ 3 - 11
examples/examples/project/application/domain/class/entity.go

@@ -1,19 +1,11 @@
 package class
 
 import (
-	"git.sxidc.com/go-framework/baize/framwork/domain"
+	"git.sxidc.com/go-framework/baize/framwork/domain/entity"
 	"git.sxidc.com/go-tools/utils/strutils"
 	"git.sxidc.com/service-supports/fserr"
 )
 
-const (
-	TableName = "test.classes"
-)
-
-const (
-	DomainPath = "/class"
-)
-
 const (
 	ColumnName       = "name"
 	ColumnStudentNum = "student_num"
@@ -24,10 +16,10 @@ const (
 )
 
 type Entity struct {
-	domain.BaseEntity
+	entity.Base
 	Name       string `sqlmapping:"column:name" sqlresult:"column:name"`
 	StudentNum int    `sqlmapping:"column:student_num;updateClear;" sqlresult:"column:student_num"`
-	domain.TimeFields
+	entity.TimeFields
 }
 
 func (e *Entity) DomainCNName() string {

+ 0 - 101
examples/examples/project/application/domain/configuration/entity.go

@@ -1,101 +0,0 @@
-package configuration
-
-import (
-	"git.sxidc.com/go-tools/utils/strutils"
-	"git.sxidc.com/service-supports/fserr"
-)
-
-const (
-	TableName = "test.configurations"
-)
-
-const (
-	ColumnScope = "scope"
-	ColumnGroup = "group"
-	ColumnValue = "value"
-)
-
-const (
-	fieldScopeMaxLen = 256
-	fieldGroupMaxLen = 256
-	fieldValueMaxLen = 256
-)
-
-type Entity struct {
-	Scope string `sqlmapping:"column:scope;key;notUpdate;" sqlresult:"column:group;"`
-	Group string `sqlmapping:"column:group;key;notUpdate;" sqlresult:"column:group;"`
-	Value string `sqlmapping:"column:value;notUpdate;" sqlresult:"column:value;"`
-}
-
-func (e *Entity) DomainCNName() string {
-	return "配置"
-}
-
-func (e *Entity) CheckKeyFields() error {
-	err := e.checkFieldScope()
-	if err != nil {
-		return err
-	}
-
-	err = e.checkFieldGroup()
-	if err != nil {
-		return err
-	}
-
-	return nil
-}
-
-func (e *Entity) ForCreate() error {
-	err := e.checkFieldScope()
-	if err != nil {
-		return err
-	}
-
-	err = e.checkFieldGroup()
-	if err != nil {
-		return err
-	}
-
-	err = e.checkFieldValue()
-	if err != nil {
-		return err
-	}
-
-	return nil
-}
-
-func (e *Entity) checkFieldScope() error {
-	if strutils.IsStringEmpty(e.Scope) {
-		return fserr.New(e.DomainCNName() + "范围为空")
-	}
-
-	if len(e.Scope) > fieldScopeMaxLen {
-		return fserr.New(e.DomainCNName() + "范围超出限定长度")
-	}
-
-	return nil
-}
-
-func (e *Entity) checkFieldGroup() error {
-	if strutils.IsStringEmpty(e.Group) {
-		return fserr.New(e.DomainCNName() + "组为空")
-	}
-
-	if len(e.Group) > fieldGroupMaxLen {
-		return fserr.New(e.DomainCNName() + "组超出限定长度")
-	}
-
-	return nil
-}
-
-func (e *Entity) checkFieldValue() error {
-	if strutils.IsStringEmpty(e.Value) {
-		return fserr.New(e.DomainCNName() + "值为空")
-	}
-
-	if len(e.Value) > fieldValueMaxLen {
-		return fserr.New(e.DomainCNName() + "值超出限定长度")
-	}
-
-	return nil
-}

+ 101 - 0
examples/examples/project/application/domain/configuration/value_object.go

@@ -0,0 +1,101 @@
+package configuration
+
+import (
+	"git.sxidc.com/go-tools/utils/strutils"
+	"git.sxidc.com/service-supports/fserr"
+)
+
+const (
+	ColumnScope = "scope"
+	ColumnGroup = "group"
+	ColumnValue = "value"
+)
+
+const (
+	fieldScopeMaxLen = 256
+	fieldGroupMaxLen = 256
+	fieldValueMaxLen = 256
+)
+
+type ValueObject struct {
+	Scope string `sqlmapping:"column:scope;key;notUpdate;" sqlresult:"column:group;"`
+	Group string `sqlmapping:"column:group;key;notUpdate;" sqlresult:"column:group;"`
+	Value string `sqlmapping:"column:value;notUpdate;" sqlresult:"column:value;"`
+}
+
+func (valueObject *ValueObject) DomainCNName() string {
+	return "配置"
+}
+
+func (valueObject *ValueObject) DomainCamelName() string {
+	return "Configuration"
+}
+
+func (valueObject *ValueObject) CheckKeyFields() error {
+	err := valueObject.checkFieldScope()
+	if err != nil {
+		return err
+	}
+
+	err = valueObject.checkFieldGroup()
+	if err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (valueObject *ValueObject) ForCreate() error {
+	err := valueObject.checkFieldScope()
+	if err != nil {
+		return err
+	}
+
+	err = valueObject.checkFieldGroup()
+	if err != nil {
+		return err
+	}
+
+	err = valueObject.checkFieldValue()
+	if err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (valueObject *ValueObject) checkFieldScope() error {
+	if strutils.IsStringEmpty(valueObject.Scope) {
+		return fserr.New(valueObject.DomainCNName() + "范围为空")
+	}
+
+	if len(valueObject.Scope) > fieldScopeMaxLen {
+		return fserr.New(valueObject.DomainCNName() + "范围超出限定长度")
+	}
+
+	return nil
+}
+
+func (valueObject *ValueObject) checkFieldGroup() error {
+	if strutils.IsStringEmpty(valueObject.Group) {
+		return fserr.New(valueObject.DomainCNName() + "组为空")
+	}
+
+	if len(valueObject.Group) > fieldGroupMaxLen {
+		return fserr.New(valueObject.DomainCNName() + "组超出限定长度")
+	}
+
+	return nil
+}
+
+func (valueObject *ValueObject) checkFieldValue() error {
+	if strutils.IsStringEmpty(valueObject.Value) {
+		return fserr.New(valueObject.DomainCNName() + "值为空")
+	}
+
+	if len(valueObject.Value) > fieldValueMaxLen {
+		return fserr.New(valueObject.DomainCNName() + "值超出限定长度")
+	}
+
+	return nil
+}

+ 3 - 11
examples/examples/project/application/domain/family/entity.go

@@ -1,19 +1,11 @@
 package family
 
 import (
-	"git.sxidc.com/go-framework/baize/framwork/domain"
+	"git.sxidc.com/go-framework/baize/framwork/domain/entity"
 	"git.sxidc.com/go-tools/utils/strutils"
 	"git.sxidc.com/service-supports/fserr"
 )
 
-const (
-	TableName = "test.families"
-)
-
-const (
-	DomainPath = "/family"
-)
-
 const (
 	ColumnFather = "father"
 	ColumnMother = "mother"
@@ -25,11 +17,11 @@ const (
 )
 
 type Entity struct {
-	domain.BaseEntity
+	entity.Base
 	Father    string `sqlmapping:"column:father" sqlresult:"column:father"`
 	Mother    string `sqlmapping:"column:mother" sqlresult:"column:mother"`
 	StudentID string `sqlmapping:"column:student_id" sqlresult:"column:student_id"`
-	domain.TimeFields
+	entity.TimeFields
 }
 
 func (e *Entity) DomainCNName() string {

+ 3 - 11
examples/examples/project/application/domain/student/entity.go

@@ -1,19 +1,11 @@
 package student
 
 import (
-	"git.sxidc.com/go-framework/baize/framwork/domain"
+	"git.sxidc.com/go-framework/baize/framwork/domain/entity"
 	"git.sxidc.com/go-tools/utils/strutils"
 	"git.sxidc.com/service-supports/fserr"
 )
 
-const (
-	TableName = "test.students"
-)
-
-const (
-	DomainPath = "/student"
-)
-
 const (
 	ColumnName = "name"
 )
@@ -23,10 +15,10 @@ const (
 )
 
 type Entity struct {
-	domain.BaseEntity
+	entity.Base
 	Name     string `sqlmapping:"column:name" sqlresult:"column:name"`
 	FamilyID string `sqlmapping:"column:family_id" sqlresult:"column:family_id"`
-	domain.TimeFields
+	entity.TimeFields
 }
 
 func (e *Entity) DomainCNName() string {

+ 0 - 2
examples/examples/project/application/service/class.go

@@ -22,8 +22,6 @@ func (app *Class) v1(appInstance *application.App) {
 
 	entity.BindSimple[class.Info](v1Binder, &entity.Simple[class.Info]{
 		Entity:             &class.Entity{},
-		TableName:          class.TableName,
-		DomainPath:         class.DomainPath,
 		CreateJsonBody:     &class.CreateJsonBody{},
 		DeleteQueryParams:  &class.DeletePathParams{},
 		UpdateJsonBody:     &class.UpdateJsonBody{},

+ 0 - 2
examples/examples/project/application/service/family.go

@@ -22,8 +22,6 @@ func (app *Family) v1(appInstance *application.App) {
 
 	entity.BindSimple[family.Info](v1Binder, &entity.Simple[family.Info]{
 		Entity:             &family.Entity{},
-		TableName:          family.TableName,
-		DomainPath:         family.DomainPath,
 		CreateJsonBody:     &family.CreateJsonBody{},
 		DeleteQueryParams:  &family.DeletePathParams{},
 		UpdateJsonBody:     &family.UpdateJsonBody{},

+ 0 - 2
examples/examples/project/application/service/student.go

@@ -22,8 +22,6 @@ func (app *Student) v1(appInstance *application.App) {
 
 	entity.BindSimple[*student.Info](v1Binder, &entity.Simple[*student.Info]{
 		Entity:             &student.Entity{},
-		TableName:          student.TableName,
-		DomainPath:         student.DomainPath,
 		CreateJsonBody:     &student.CreateJsonBody{},
 		DeleteQueryParams:  &student.DeletePathParams{},
 		UpdateJsonBody:     &student.UpdateJsonBody{},

+ 0 - 4
examples/examples/project/application/service/student_and_family.go

@@ -24,10 +24,6 @@ func (app *StudentAndFamily) v1(appInstance *application.App) {
 	one2one.BindSimple(v1Binder, &one2one.Simple[student.Info, *family.Info]{
 		Left:                          &student.Entity{},
 		Right:                         &family.Entity{},
-		LeftTableName:                 student.TableName,
-		RightTableName:                family.TableName,
-		LeftDomainPath:                student.DomainPath,
-		RightDomainPath:               family.DomainPath,
 		LeftUpdateJsonBody:            &student.UpdateFamilyOfStudentJsonBody{},
 		LeftQueryQueryParams:          &student.QueryFamilyOfStudentQueryParams{},
 		LeftQueryWithRightQueryParams: &student.QueryStudentWithFamilyQueryParams{},

+ 0 - 53
framwork/domain/entity.go

@@ -1,53 +0,0 @@
-package domain
-
-import (
-	"git.sxidc.com/go-tools/utils/strutils"
-)
-
-type Entity interface {
-	Object
-	DomainCNName() string
-	DomainCamelName() string
-	GenerateID() error
-	GetID() string
-	CheckFieldID(domainCNName string) error
-	ForCreate() error
-	ForUpdate() error
-}
-
-type BaseEntity struct {
-	ID string `sqlmapping:"column:id;key;" sqlresult:"column:id;"`
-}
-
-func (e *BaseEntity) DomainCNName() string {
-	panic("领域实体没有实现DomainCNName接口")
-}
-
-func (e *BaseEntity) DomainCamelName() string {
-	panic("领域实体没有实现DomainCamelName接口")
-}
-
-func (e *BaseEntity) GenerateID() error {
-	e.ID = strutils.SimpleUUID()
-	return nil
-}
-
-func (e *BaseEntity) GetID() string {
-	return e.ID
-}
-
-func (e *BaseEntity) CheckFieldID(domainCNName string) error {
-	return CheckID(domainCNName, "ID", e.ID)
-}
-
-func (e *BaseEntity) IDColumnName() string {
-	return ColumnID
-}
-
-func (e *BaseEntity) ForCreate() error {
-	panic("领域实体没有实现ForCreate接口")
-}
-
-func (e *BaseEntity) ForUpdate() error {
-	panic("领域实体没有实现ForUpdate接口")
-}

+ 24 - 0
framwork/domain/entity/base.go

@@ -0,0 +1,24 @@
+package entity
+
+import "git.sxidc.com/go-tools/utils/strutils"
+
+type Base struct {
+	ID string `sqlmapping:"column:id;key;" sqlresult:"column:id;"`
+}
+
+func (e *Base) DomainCNName() string {
+	panic("领域实体没有实现DomainCNName接口")
+}
+
+func (e *Base) DomainCamelName() string {
+	panic("领域实体没有实现DomainCamelName接口")
+}
+
+func (e *Base) GenerateID() error {
+	e.ID = strutils.SimpleUUID()
+	return nil
+}
+
+func (e *Base) GetID() string {
+	return e.ID
+}

+ 32 - 0
framwork/domain/entity/entity.go

@@ -0,0 +1,32 @@
+package entity
+
+import (
+	"git.sxidc.com/go-framework/baize/framwork/domain"
+)
+
+type Entity interface {
+	domain.Object
+	DomainCNName() string
+	DomainCamelName() string
+	GenerateID() error
+	GetID() string
+	CheckFieldID(domainCNName string) error
+	ForCreate() error
+	ForUpdate() error
+}
+
+func (e *Base) CheckFieldID(domainCNName string) error {
+	return CheckID(domainCNName, "ID", e.ID)
+}
+
+func (e *Base) IDColumnName() string {
+	return ColumnID
+}
+
+func (e *Base) ForCreate() error {
+	panic("领域实体没有实现ForCreate接口")
+}
+
+func (e *Base) ForUpdate() error {
+	panic("领域实体没有实现ForUpdate接口")
+}

+ 1 - 19
framwork/domain/common.go → framwork/domain/entity/field.go

@@ -1,8 +1,6 @@
-package domain
+package entity
 
 import (
-	"git.sxidc.com/go-tools/utils/strutils"
-	"git.sxidc.com/service-supports/fserr"
 	"time"
 )
 
@@ -15,22 +13,6 @@ const (
 	ColumnLastUpdatedTime  = "last_updated_time"
 )
 
-const (
-	FieldIDLen = 32
-)
-
-func CheckID(domainCNName string, fieldCNName string, id string) error {
-	if strutils.IsStringEmpty(id) {
-		return fserr.New(domainCNName + fieldCNName + "为空")
-	}
-
-	if len(id) != FieldIDLen {
-		return fserr.New(domainCNName + fieldCNName + "长度不正确")
-	}
-
-	return nil
-}
-
 type TenantIDField struct {
 	TenantID string `sqlmapping:"column:tenant_id;" sqlresult:"column:tenant_id;"`
 }

+ 36 - 0
framwork/domain/entity/utils.go

@@ -0,0 +1,36 @@
+package entity
+
+import (
+	"git.sxidc.com/go-tools/utils/strutils"
+	"git.sxidc.com/go-tools/utils/template"
+	"git.sxidc.com/service-supports/fserr"
+	"github.com/iancoleman/strcase"
+)
+
+func TableName(e Entity) string {
+	return template.Plural(strcase.ToSnake(template.Id(e.DomainCamelName())))
+}
+
+func RelativeDomainPath(e Entity) string {
+	return "/" + strcase.ToLowerCamel(template.Id(e.DomainCamelName()))
+}
+
+func SnakeDomainName(e Entity) string {
+	return strcase.ToSnake(template.Id(e.DomainCamelName()))
+}
+
+const (
+	fieldIDLen = 32
+)
+
+func CheckID(domainCNName string, fieldCNName string, id string) error {
+	if strutils.IsStringEmpty(id) {
+		return fserr.New(domainCNName + fieldCNName + "为空")
+	}
+
+	if len(id) != fieldIDLen {
+		return fserr.New(domainCNName + fieldCNName + "长度不正确")
+	}
+
+	return nil
+}

+ 0 - 8
framwork/domain/value_object.go

@@ -1,8 +0,0 @@
-package domain
-
-type ValueObject interface {
-	Object
-	DomainCNName() string
-	CheckKeyFields() error
-	ForCreate() error
-}

+ 18 - 0
framwork/domain/value_object/utils.go

@@ -0,0 +1,18 @@
+package value_object
+
+import (
+	"git.sxidc.com/go-tools/utils/template"
+	"github.com/iancoleman/strcase"
+)
+
+func TableName(valueObject ValueObject) string {
+	return template.Plural(strcase.ToSnake(template.Id(valueObject.DomainCamelName())))
+}
+
+func RelativePath(valueObject ValueObject) string {
+	return "/" + strcase.ToLowerCamel(template.Id(valueObject.DomainCamelName()))
+}
+
+func SnakeDomainName(valueObject ValueObject) string {
+	return strcase.ToSnake(template.Id(valueObject.DomainCamelName()))
+}

+ 11 - 0
framwork/domain/value_object/value_object.go

@@ -0,0 +1,11 @@
+package value_object
+
+import "git.sxidc.com/go-framework/baize/framwork/domain"
+
+type ValueObject interface {
+	domain.Object
+	DomainCNName() string
+	DomainCamelName() string
+	CheckKeyFields() error
+	ForCreate() error
+}