Gatewayの責務
Gatewayは、GitHub APIなど外部サービスとのやり取りを隠す層です。
Application層は FetchKnowledgeSourcePort だけを知っており、GitHub Contents APIのURLやレスポンス形式を知りません。
このアプリでの実装
GitHubKnowledgeSource: GitHub Contents APIからMarkdownを取得するInMemoryKnowledgeSource: テストやローカルサンプル用にMarkdownを返す
うれしいこと
- UseCaseをGitHubなしでテストできる
- GitHub APIの仕様変更をInfrastructure層に閉じ込められる
- 将来、取得元をS3やNotionに変えてもApplication層を守りやすい