📁
【Golang】ディレクトリ構成
某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