Go言語で実装されたクリーンアーキテクチャの実装例を見つけたので、ソースを読みつつなんとなくクラス図とER図を書いてみました。
クラス図
- 図の中にメモ書きしてありますが、ほぼ全てのオブジェクトを main で生成しています。
- Model は Article と Author の2つですが、 Usecase や Handler の名前は ArticleXxxx になっています。関心の対象が Article だから?
ER図
- DB上には article と author 以外にいくつかテーブルがありましたが、実装上はこの2つのテーブルだけを使っているようでした。
- article が author_id を保持するようになっています。
JOINについて気になった
複数の article と、それに紐付く author をセットで取得する部分の実装が気になりました。
素朴に考えると、 article と author の2テーブルをJOINして1回のSQL発行でデータ取得しそうな気がしますが、この go-clean-arch では、
- article を複数取得 (ArticleRepositoryを使用)
- article 1件1件をループで回す
- ループの中で article 1件に対応する author を1件取得 (AuthorRepositoryを使用)
という感じでループの中で何度もSQLを発行している実装となっていて、パフォーマンスの考慮はなさそうでした。
この辺はサンプル実装だからですかね。
※RDBを使った場合、1テーブル1モデルにするのは無理がある?
以上です。