专用接口用于业务逻辑

作者: n0tm创建于 2024年1月25日更新于 2025年2月26日
标签good first issuequestion

你好!你的仓库中有翻译用例的示例代码。在 internal/usecase/interfaces.go 中,你创建了 Translation、TranslationRepo、TranslationWebAPI 这些接口。我完全同意 TranslationRepo 和 TranslationWebAPI 这些接口,它们是技术实现,因此专门为它们分配一个接口是有意义的,这样它们就可以被覆盖。但是我不太明白,为领域用例/服务分配一个接口是否真的必要?Vaughn Vernon 在《实现领域驱动设计》一书中写道,服务或在你的情况下是用例的领域特定实现不必分配给接口;而且,他还写道,不为领域特定服务选择接口的方法更方便,因为领域服务有最终实现,而且没有任何情况下可以替换它们。这不会影响测试,因为你更愿意测试 useCase 或 Service 单元测试,以及控制器集成测试(在你的仓库中就是这样,我完全同意这一点)。我开启这个问题是因为我的同事把你的仓库当作教条,但是当我询问为何要创建这个接口时,没有人能回答为什么,但他们认为你写了它是有原因的。因此,我想和你澄清这个问题,也许我没有看到一些潜在的问题……

内容来源: evrone/go-clean-template