Go语言 存储库-服务-控制器模式中的导出类型[已关闭]

ljsrvy3e  于 2023-02-10  发布在  Go
关注(0)|答案(1)|浏览(139)
    • 已关闭**。此问题为opinion-based。当前不接受答案。
    • 想要改进此问题吗?**请更新此问题,以便editing this post可以用事实和引文来回答。

8天前关闭。
Improve this question
如果您已经知道存储库-服务-控制器模式,请跳过下面的部分。
上下文的存储库-服务-控制器模式的简要说明。
在Go Web应用程序中,以下是代码组织-

main.go

server
|__clientdata.go

clientdata
|__controller.go
|__service.go
|__repository.go

main.go是入口点。它创建一个服务器多路复用对象,并调用服务器包中定义在该对象上的接收方法。这些方法定义路由/端点,并将它们Map到各自包中controller.go公开的各自handlefuncs(此处为package clientdata)。
然后,控制器调用服务,服务又调用存储库-所有存储库都在同一个包中。
但是,为什么服务和存储库方法是导出类型(即,首字母大写),而在此模式中,它们 * 由同一个包中的控制器调用?*
不必要的出口不是一个坏习惯吗?
问题是:
那为什么要出口呢?我不出口可以吗?

uurity8g

uurity8g1#

这是因为来自不同包的服务可以用于组成新的控制器,同样,来自不同包的存储库可以用于组成新的服务(需要时,请参见下面的示例)。
例如,构建一个数据库服务,该服务同时使用内存缓存和持久数据存储服务,如Redis和Mongodb,它们各自拥有自己的存储库。
注:将添加一个更详细的答案,但这给出了想法。希望这有助于像我这样的新手。

相关问题