我正在将一个应用程序从Play(Scala)移植到Go并想知道如何实现依赖注入。在 Scala 中,我使用了 cake 模式,而在 Scala 中,Go我实现了一个DAO接口以及一个 Mongo 的实现。
下面是我如何尝试实现一个模式,让我DAO根据需要更改实现(例如测试、不同的数据库等):
1. entity.go
package models
import (
"time"
"gopkg.in/mgo.v2/bson"
)
type (
Entity struct {
Id bson.ObjectId `json:"id,omitempty" bson:"_id,omitempty"`
CreatedAt time.Time `json:"createdAt,omitempty" bson:"createdAt,omitempty"`
LastUpdate time.Time `json:"lastUpdate,omitempty" bson:"lastUpdate,omitempty"`
}
)
2. 用户.go
package models
import (
"time"
)
type (
User struct {
Entity `bson:",inline"`
Name string `json:"name,omitempty" bson:"name,omitempty"`
BirthDate time.Time `json:"birthDate,omitempty" bson:"birthDate,omitempty"`
}
)
3. dao.go
package persistence
type (
DAO interface {
Insert(entity interface{}) error
List(result interface{}, sort string) error
Find(id string, result interface{}) error
Update(id string, update interface{}) error
Remove(id string) error
Close()
}
daoFactory func() DAO
)
var (
New daoFactory
)
上面的代码是 90% 的好......我只是在mongoDao.go
方法Insert
和Update
编译器强制我将输入强制entity
转换为特定类型 ( *models.User
) 方面存在问题,但这使我无法拥有DAO
适用于所有类型的通用组件。我该如何解决这个问题?
德玛西亚99
一只甜甜圈
相关分类