依赖注入:功能集合的模式和命名

时间:2019-07-12 21:45:59

标签: go dependency-injection naming

我正在Go中开发一个框架,让用户注入依赖项,例如记录器和数据库。我提供了我希望用户实现的接口。

现在,我还需要用户提供一堆功能,例如签名验证和哈希,因为我不想为此选择特定的实现。请参见以下示例(不切实际)

package crypto

type Fns interface {
    // Hash returns the hash digest of the passed data
    Hash([]byte) []byte
    // Verify checks for a valid signature on the message for given public key
    Verify(msg, sig []byte, pk PublicKey) (bool, error)
}

因此,此crypto.Fns接口只是功能的集合。我希望用户将其实现为无状态struct{}类型。我也不想将其保存到包全局变量中,只是像这样包装调用

package crypto

// user must set this before using the framework
var Impl Fns

func Hash(data []byte) []byte { return Impl.Hash(data) }
// ...

因为在以后的某个时间点,在框架的不同位置使用不同的实现可能会变得有趣。

您认为这是一个好模式吗?如果是这样,我该怎么命名? FnsHelperImpl

0 个答案:

没有答案