Go 域和数据库之间的映射
我正在创建一个应用程序,它从数据库中获取数据,并将它们作为JSON传递给前端 我认为为从数据库获取的数据和传递给REST服务的数据创建单独的Go 域和数据库之间的映射,go,Go,我正在创建一个应用程序,它从数据库中获取数据,并将它们作为JSON传递给前端 我认为为从数据库获取的数据和传递给REST服务的数据创建单独的结构是一个好主意。我是对的还是我的错 在这种情况下,我需要将结构从一层映射到另一层。我现在在数据库层执行此操作: func (ds *DataStore) AddUnit(_unit models.Unit) { unit := Unit{} unit.Name = _unit.Name unit.Description = _un
结构是一个好主意。我是对的还是我的错
在这种情况下,我需要将结构从一层映射到另一层。我现在在数据库层执行此操作:
func (ds *DataStore) AddUnit(_unit models.Unit) {
unit := Unit{}
unit.Name = _unit.Name
unit.Description = _unit.Description
db.Create(&unit)
}
func (ds *DataStore) UpdateUnit(id int, _unit models.Unit) models.Unit {
unit := Unit{}
db.First(&unit, id)
unit.Name = _unit.Name
unit.Description = _unit.Description
db.Save(&unit)
return _unit
}
现在,我的代码中每个实体的每个方法中都有这段代码。是否有某种方法或库可以提取此映射功能,并在单独的文件中使用声明方式对其进行描述?您可以查找并使用库;libs的问题在于,它们试图解决未知问题。图书馆的作者不知道如何使用它。在某些情况下,这会使它们比自己编写代码慢得多,灵活性差得多,而且更复杂
首先,您应该从数据存储中提取重复逻辑:
// extract the logic of copying across the fields to a function
func setFields(u Unit, unit models.Unit) Unit {
u.Name = unit.Name
u.Description = unit.Description
return u
}
func (ds *DataStore) AddUnit(_unit models.Unit) {
// trimmed ...
unit := setFields(Unit{}, _unit)
// trimmed ...
}
func (ds *DataStore) UpdateUnit(id int, _unit models.Unit) models.Unit {
unit := Unit{}
db.First(&unit, id)
unit = setFields(unit, _unit)
// trimmed ...
}
您还可以考虑将<代码> SETFiels<代码>的函数调用提取到一个新的接口:
type unitSetter interface {
setFields(u Unit, unit models.Unit) Unit
}
并将其添加到数据存储中
,以使代码更具可扩展性、可重用性和可测试性
type DataStore struct {
// trimmed ...
units unitSetter
}
func (ds *DataStore) AddUnit(_unit models.Unit) {
// trimmed ...
unit := ds.units.setFields(Unit{}, _unit)
// trimmed ...
}