如何自定义pagefacade的数据转换逻辑?go语言
在 UiSimpleQR 框架中pagefacade 的核心职责是将数据库实体Entity转换为响应对象Response。默认情况下它可能只是简单的字段映射或类型断言。如果你想自定义转换逻辑例如字段重命名、数据脱敏、关联查询赋值、格式化时间等通常有以下三种方式按推荐程度排序️ 方法一重写 PageTo 方法最灵活这是最直接的方式。由于 UiSimpleR 中的 PageTo 方法是对外暴露的你可以在你自己的 Request 结构体如 UiAdminStudyRequest中重新定义它拦截数据处理流程。原理获取到底层查出的 []E 数据后手动遍历并转换为你想要的 []R。// 在你的 ui_admin_study_request.go 中func (self *UiAdminStudyRequest) PageTo(dbResult pagemodel.PageResult[coachentity.OpcCoachAdmin]) pagemodel.PageResult[coachentity.UiCoachResult] {// 1. 初始化响应结果结构保留分页信息// 假设 pagemodel.PageResult 有 CopyMeta 或者手动赋值 Total/PageNores : pagemodel.PageResult[*coachentity.UiCoachResult]{Total: dbResult.Total,Page: dbResult.Page,PageSize: dbResult.PageSize,Data: make([]*coachentity.UiCoachResult, 0),}// 2. 自定义循环转换逻辑for _, entity : range dbResult.Data {if entity nil {continue}// --- 开始自定义逻辑 ---// A. 基础字段映射vo : coachentity.UiCoachResult{CoachID: entity.ID,CoachName: entity.Name,}// B. 复杂逻辑处理 (例如根据状态码转义文字)if entity.Status 1 {vo.StatusDesc 在职} else {vo.StatusDesc 离职}// C. 敏感数据脱敏 (例如手机号中间四位隐藏)// vo.Phone utils.MaskPhone(entity.Phone)// D. 关联数据填充 (如果需要可以在这里调其他 Service)// vo.DeptName deptService.GetNameById(entity.DeptId)// --- 结束自定义逻辑 ---res.Data append(res.Data, vo)}return res}调用时机当你调用 self.QueryModelR() 或 self.PageTo(self.List()) 时Go 语言的多态机制会自动调用你重写的这个版本而不是框架默认的简单版本。 方法二利用 JSON Tag 进行“伪”定制最简单如果你的“自定义转换”仅仅是为了改字段名例如数据库叫 user_name前端要 name或者忽略某些字段你不需要写代码逻辑直接修改 R 结构体的 Tag 即可。原理pagefacade 最终通常会将结果序列化为 JSON。Go 的 encoding/json 标准库会读取 Tag。type UiCoachResult struct {// 数据库中是 ID返回给前端变成 coach_idID int64 json:coach_id// 数据库中是 Name返回给前端变成 nameName string json:name// 这个字段在数据库中由但不想返回给前端Password string json:-// 格式化时间 (需要配合第三方库如 github.com/gin-gonic/gin/binding 或自定义 MarshalJSON)CreateTime time.Time json:create_time} 方法三实现接口或注入转换函数最解耦查看你的框架版本是否支持注入转换函数。有些高级版本的 PagePtrFacade 允许你在初始化时传入一个 ConvertFunc。如果 UiSimpleR 提供了类似 SetConverter 的方法或者你可以扩展它你可以这样做// 伪代码示例取决于框架具体实现func (self *UiAdminStudyRequest) Init() {// 假设框架支持这种回调模式self.PagePtrFacade.SetConvertFunc(func(e *coachentity.OpcCoachAdmin) *coachentity.UiCoachResult {return coachentity.UiCoachResult{CoachID: e.ID,// ... 你的逻辑}})} 总结建议需求复杂度 推荐方案 优点简单字段改名/隐藏 方法二 (JSON Tag) 零代码维护成本低性能最好。逻辑计算/脱敏/组装 方法一 (重写 PageTo) 控制力最强完全掌握数据流向符合 Go 语言习惯。框架支持回调 方法三 (函数注入) 代码最优雅但依赖框架本身的支持。对于大多数业务场景方法一重写 PageTo 是最稳妥且通用的选择。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2590947.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!