Go公式ドキュメント「Organizing a Go module」の内容をもとに、SOLID原則、特にインターフェース分離原則と依存性逆転原則を組み合わせて、シンプルで拡張性の高いGoのパッケージ構成を考察する記事です。技術的関心事によるレイヤー分割ではなく、user、paymentのような機能単位での垂直分割がGoらしいアプローチだと著者は主張しています。
推奨構成では、domain.go、usecase.go、repository.goなど役割を表すファイル名を用い、最初は小さくまとめて必要に応じ段階的に分割していきます。feature配下にinternal/を作ることでカプセル化を強化し密結合を防げるとのことです。著者自身、記事末尾で「個人の考えの結果であり、ベストプラクティスではない」と断っています。
出典が伝えている要点
- 記事はGo公式ドキュメント「Organizing a Go module」に基づいている
- 記事は、技術的関心によるレイヤー構造ではなく機能単位での垂直分割がGoらしいアプローチだと主張している
- 推奨されるモジュール構成では、トップレベルをuser、paymentなど機能ごとに分割する
- 推奨されるファイル名はdomain.go、usecase.go、repository.goなど役割を表すものである
- 推奨される構成では、最初は小さくまとめ、必要に応じて段階的に分割していく
- SOLID原則のうちインターフェース分離原則については、使う側が最小限のメソッドだけ定義するとしている
- SOLID原則のうち依存性逆転原則については、具象側ではなく使用側がインターフェースを宣言するとしている
- feature配下にinternal/を作ることでカプセル化を強化し、密結合を防止できるとしている
- 著者(はち)はGo言語プログラマーで、株式会社イノベーション所属である
- 記事内で、この内容は個人の考えの結果でありベストプラクティスではないと明示されている
原文より
個人の考えの結果であり、ベストプラクティスではない
出典: zenn.dev