fkm blog

software開発に関することを書いていきます

Goのパッケージの分け方

Goのパッケージの分け方で試行錯誤中なfkmです. Goに限らずかもですが。。

サーバーサイドGo(という表現が正しいかどうかは不明)で, こんな感じのパッケージ構成ってどうなんだろう?

main.go
server
  | server.go
  | handler
  | logic
  | model

main.goは, serverにRouterを作ってもらって起動するだけ


server.goはいろんなオブジェクトを作って, Routerを返す役割. ということでこの次が問題.

  • handlerはlogicオブジェクトがあれば作れる
  • logicはmodelオブジェクトがあれば作れる
  • modelは標準のDBオブジェクトなどがあれば作れる

ここで悩むのが, logic / modelのinterface定義をどこに置くかというもの.

昨日聞いたアイデアだと, 使いたい人がinterfaceの定義をセットで持っておけばいいんじゃない案

| handler
|  | logic
|     | interfaces.go
| logic
|  | model
|    | interfaces.go
| model

パッケージを1つずらしておかないと, テスト時に循環importすることになって死ぬ。。。