程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了我如何使用接口重构这段代码,如果是这样,我应该吗?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

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

开发过程中遇到我如何使用接口重构这段代码,如果是这样,我应该吗?的问题如何解决?下面主要结合日常开发的经验,给出你关于我如何使用接口重构这段代码,如果是这样,我应该吗?的解决方法建议,希望对你解决我如何使用接口重构这段代码,如果是这样,我应该吗?有所启发或帮助;

我正在编写一个软件,该软件使用来自不同服务的 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?

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

谢谢。

解决方法

// "struct endPoint interface" is invalid,and signatures are missing their return types:
type endPoint interface{
    getLastDateURL() string
    processData() output
}

那我将如何使用它?

我无法给出完整的解决方案,因为您还没有展示您如何使用当前代码,但总的来说,您应该:

  • 实例化一个实现的东西 - 在当前实现中设置 Name 的任何东西都会创建一个实现 endPoint 的具体类型的实例
  • 调用 getLastDateURL 和/或 processData 的东西 - 它不会收到 *endPoint struct,而是收到 endPoint 接口值,然后就不会关心底层实现是什么;它只会调用方法,就像今天一样

我的最终目标是拥有可维护且干净的代码。

这可能是实现这一目标的好方法,但这取决于问题中未显示的上下文。

老实说,我很讨厌我必须为每个端点编写相同的方法来实现接口

已经为每个端点编写一个实现,您只是用相同的方法编写它们。您必须编写的代码量几乎相同,但生成的代码更清晰、更有条理——例如,每个具体实现都可以在自己的文件中,而不必都在相同的方法中。由于有许多/复杂的提供程序,如果您需要更改或添加提供程序,您当前的解决方案将变得越来越难以导航。

,

使用 double dispatch pattern:

在 endPoint 上为它支持的每个类定义一个类型化的 func。

定义一个接口,它有一个接受 endPoint 对象的函数。

让所有想要使用 endPoint 的类都实现该接口的 func 并将自己传递给类型化的 endPoint 方法。

要调用它,请调用传递 endPoint 的接口方法。

恕我直言,你应该这样做。

大佬总结

以上是大佬教程为你收集整理的我如何使用接口重构这段代码,如果是这样,我应该吗?全部内容,希望文章能够帮你解决我如何使用接口重构这段代码,如果是这样,我应该吗?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: