Golang适用的DTO工具
August 29, 2018
DTO (Data Transfer Object) 是Java中的概念,起到数据封装和隔离的作用。在使用Golang开发Web应用的过程中,也会有类似的需求。先贴项目地址 github.com/yeqown/server-common/tree/master/dbs/tools
举个例子 #
现在有一个用户数据结构如下,
type UserModel struct {
ID int64 `gorm:"column:id"`
Name string `gorm:"column:name"`
Password string `gorm:"column:password"`
}
// 问题1: 现在要求是想要JSON格式返回用户数据,并且不希望其中包含有Password字段 // 解决1:
type UserModel struct {
ID int64 `gorm:"column:id" json:"id"`
Name string `gorm:"column:name" json:"name"`
Password string `gorm:"column:password" json:"-"`
}
// 问题2: 同样是JSON数据格式,并且希望额外返回用户的身份标示Ident(假设必须要跟用户数据放在一起) // 解决2: (这也是我的场景)
type UserDTO struct {
ID int64 `json:"id"`
Name string `json:"name"`
Password string `json:"-"`
Ident string `json:"ident"`
}
func LoadUserDTOFromModel(data *UserMolde) *UserDTO {
ident := genUserIdent(data)
return &{
ID data.ID,
Name data.Name,
Ident ident,
}
}
背景和需求 #
一般来说我的项目结构如下:其中models和services也就是分开定义Data struct(UserModel)和Object(UserDTO)的文件夹。
其实DTO的过程对于我来说,就是基于Data Struct生成一个新的Struct结构,并附带一个func LoadDTOTypeFromModel(data *ModelType) *DTOType
。在这个过程中,其实除了个别Object结构体需要额外处理以外,大部分都是新换一个tag~。因此这部分工作步骤都是类似的,那么为什么不用一个工具来避免这部分重复的工作呢~?
思路 #
先说一下思路:
...