🦧

Clean ArchitectureにおけるRepositoryとGateway

2022/01/09に公開

主旨

Clean Architectureに登場するユースケースと外界とのアダプターとなるRepositoryとGatewayという概念について、実際に使う場面になった時にどちらをレイヤ名として使用するのが正しいのか?が気になったので、備忘録としてまとめておこうと思いました。
(個人的解釈なので、誤りがあればご指摘いただけると嬉しいです!)

結論

結局のところ、「ユースケースと外界とのアダプターとなる責務を果たしている」なら、どちらでも良さそうという結論に至りました(雑ですみません)

そもそも気になった経緯

Clean Architectureといえば以下の図が有名かと思います。

緑色の部分にあるInterface AdapterにはGatewayと書かれていますが、実際に開発する時やWebでサンプルコードを見たりすると、Repositoryという命名で主にDBとの接続を責務とするレイヤが設けられている印象がありました。
しかしながら、なぜGatewayではなくRepositoryという命名にしているのか?
Interface Adapterには「外界とのアダプター」という責務があるので、対象がDBだけとは限らないのに「Repository = DBとの接続を責務とするレイヤ」というデファクトスタンダードみたいになってるのはなぜだろう?という気になりがきっかけでした。

少し古い記事ですが、「Database GatewayをRepositoryって呼ぶのがポピュラーだから」のような意見も書かれていたりました。(何でRepositoryって呼ぶようになったのかはわからないけど…)
https://discourse.world/h/2017/08/11/Misconceptions-Clean-Architecture

参考情報

https://discourse.world/h/2017/08/11/Misconceptions-Clean-Architecture
https://learning-notes.mistermicheels.com/architecture-design/reference-architectures/clean-architecture/
https://github.com/madetech/clean-architecture/blob/master/gateway.md

Discussion