📁

【Golang】ディレクトリ構成

2022/07/21に公開

某pomeさんにコードレビューいただきましたシリーズです。

domainやusecase(ディレクトリ)配下でドメインごとにさらにディレクトリを掘るか掘らないか

掘るか掘らないかはパッケージ内でどれくらい実装をプライベートにしたいか? によります。
例えば、domainは他の

package domain
type User struct {
    name   string
    id     string
    Task   Task 
}
package domain

type Task struct {
   name  string
   todo  string
}

など、他の構造体でその構造体を使いたいなというタイミングが出てきた場合に、プライベートにしていないと、依存してしまう可能性があるため、ディレクトリを掘って、package名を個別に定義することで、実装同士の依存を弱くすることができます。
usecaseやhandlerは、それぞれパッケージに依存することはそんなにないため、特にpackageを分ける必要はなく、usecase直下にボンボンぶっ込んで、package名もusecase(handlerならhandler)でOKです。

usecase
∟userUsecase
∟taskUsecase
handler
∟userHandler
∟taskHandler

その方が、usecase(や、handler)を使う際、パッケージ名.メソッド名(関数名、構造体名)など、リネームの手間なくスッキリ使うことができます。

usecase.User()
handler.User()

しかし、infrastructure(repository)に関しては扱う概念が増えてくるのでディレクトリごとに分ける方が好ましいです。
パッケージの分け方などは、goの標準パッケージを見るとわかるよ!とのことです。

Discussion