gpt4 book ai didi

go - 域和数据库之间的映射

转载 作者:数据小太阳 更新时间:2023-10-29 03:22:38 24 4
gpt4 key购买 nike

我正在创建从数据库获取数据并将它们作为 JSON 传递到前端的应用程序。

我认为为从数据库中获取的数据和传递给 REST 服务的数据创建单独的结构 是个好主意。我是对的还是我的错?

在这种情况下,我需要将结构从一层映射到另一层。我现在在数据库层做:

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 的问题在于他们试图迎合未知的问题。图书馆的作者不知道它将如何使用。在某些情况下,这会使他们比自己编写代码更慢、更不灵活并且更复杂。

首先,您应该从 DataStore 中提取重复的逻辑:

// 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 ...
}

然后您还可以考虑将 setFields 的函数调用提取到一个新接口(interface):

type unitSetter interface {
setFields(u Unit, unit models.Unit) Unit
}

并将其添加到 DataStore 中,使代码更具可扩展性、可重用性和可测试性。

type DataStore struct {
// trimmed ...
units unitSetter
}

func (ds *DataStore) AddUnit(_unit models.Unit) {
// trimmed ...
unit := ds.units.setFields(Unit{}, _unit)
// trimmed ...
}

关于go - 域和数据库之间的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50896285/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com