Goのクリーンアーキテクチャ実装 go-clean-arch を読む

Go言語で実装されたクリーンアーキテクチャの実装例を見つけたので、ソースを読みつつなんとなくクラス図とER図を書いてみました。

github.com

クラス図

  • 図の中にメモ書きしてありますが、ほぼ全てのオブジェクトを main で生成しています。
  • Model は Article と Author の2つですが、 Usecase や Handler の名前は ArticleXxxx になっています。関心の対象が Article だから?

f:id:y_d:20210727230244p:plain
クラス図

ER図

  • DB上には article と author 以外にいくつかテーブルがありましたが、実装上はこの2つのテーブルだけを使っているようでした。
  • article が author_id を保持するようになっています。

f:id:y_d:20210727230241p:plain
ER図

JOINについて気になった

複数の article と、それに紐付く author をセットで取得する部分の実装が気になりました。

素朴に考えると、 article と author の2テーブルをJOINして1回のSQL発行でデータ取得しそうな気がしますが、この go-clean-arch では、

  1. article を複数取得 (ArticleRepositoryを使用)
  2. article 1件1件をループで回す
  3. ループの中で article 1件に対応する author を1件取得 (AuthorRepositoryを使用)

という感じでループの中で何度もSQLを発行している実装となっていて、パフォーマンスの考慮はなさそうでした。
この辺はサンプル実装だからですかね。
RDBを使った場合、1テーブル1モデルにするのは無理がある?

以上です。