如何使用接口重构此代码,如果是这样,我应该吗?

我正在编写一个软件,该软件使用来自不同服务的API,并且方法将相同但执行不同。我想知道代码是否可以在接口中组织,或者我只是继续这样工作:


type endPoint struct{

    serverName string

}


func (this *endPoint) getLastDateURL () string{

    if this.Name ="A"{

        return "api.someAWebsite.com/getLastDate"

    }

    if this.Name ="B"{

        return "api.someBWebsite.com/getLastDate"

    }

    return ""

}


func (this *endPoint) processData () output{

    if this.Name ="A"{

        //process in some way

        return

    }

    if this.Name ="B"{

                //process in some different way

                return

    }

    return

}

我正在考虑的界面替代方案是关于这个的:


struct endPoint interface{

    getLastDateURL()

    processData()

}


...

Do each method for each API provider

How would I use it then?

我的最终目标是拥有可维护且干净的代码。老实说,我讨厌这样一个事实,即我必须为每个端点编写相同的方法来实现接口,但也许我还没有那么清楚的接口概念,或者在这种情况下使用接口几乎没有优势,再次,可维护和干净的代码的最终目标。


婷婷同学_
浏览 117回答 2
2回答

湖上湖

// "struct endPoint interface" is invalid, and signatures are missing their return types:type endPoint interface{    getLastDateURL() string    processData() output}那我该如何使用它呢?我无法给出一个完整的解决方案,因为你还没有展示你如何使用你目前的代码,但总的来说你会有:实例化实现的东西 - 无论在当前实现中设置什么,都会创建一个具体类型实现的实例。NameendPoint调用和/或的东西 - 而不是接收结构,它将接收接口值,然后不会关心底层实现是什么;它只会调用方法,就像今天一样getLastDateURLprocessData*endPointendPoint我的最终目标是拥有可维护且干净的代码。这可能是实现这一目标的好方法,但它取决于问题中未显示的上下文。老实说,讨厌这样一个事实,即我必须为每个端点编写相同的方法来实现接口您已经为每个端点编写了一个实现,只是将它们全部用相同的方法编写。你必须编写的代码量几乎是相同的,但生成的代码更干净,更有条理 - 例如,每个具体的实现都可以在自己的文件中,而不必全部使用相同的方法。对于许多/复杂的提供商,如果您需要更改当前解决方案或添加提供商,则导航起来变得越来越困难。

元芳怎么了

使用双重调度模式:在端点上为其支持的每个类定义一个类型化 func。定义一个接口,该接口具有接受终结点对象的 func。让所有想要使用 endPoint 的类实现该接口的 func,并将自身传递给类型化的 endPoint 方法。若要调用它,请调用传递终结点的接口方法。恕我直言,你应该这样做。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go