douyan6742 2019-07-12 21:45
浏览 22

依赖注入:函数集合的模式和命名

I'm developing a framework in Go where I let the user inject dependencies like a logger and a database. I provide interfaces for these that I expect the user to implement.

Now I also need the user to provide a bunch of functions, like signature verification and hashing, because I don't want to choose a specific implementation for it. See the following (unrealistic) example

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)
}

So this crypto.Fns interface is just a collection of functions. I expect the user to implement it as a stateless struct{} type. I also don't want to save it to a package global variable and just wrap the calls like so

package crypto

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

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

because at a later point in time it might become interesting to use different implementations at different places in the framework.

Do you think this is a good pattern? If so, how should I name this thing? Fns? Helper? Impl?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥100 任意维数的K均值聚类
    • ¥15 stamps做sbas-insar,时序沉降图怎么画
    • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
    • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
    • ¥15 关于#Java#的问题,如何解决?
    • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
    • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
    • ¥15 cmd cl 0x000007b
    • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
    • ¥500 火焰左右视图、视差(基于双目相机)