丁度2年くらいたつサービスで、APIのリポジトリクラスの設計がいけていないと思い、改めて設計するならどんな設計にするのがよいのか悩んでいたところ
この記事が参考になったのでまとめてみる scrapbox.io
記事では投稿日順にならんだ10件のカルーセルを例に挙げて、どのようなリポジトリ(のインターフェース)にするかを考察している
選択肢は4つ
- ページ仕様特化型で作る
- ページ仕様特化型だが将来の再利用を考慮して、想像しうる変更可能なオプションを引数で渡せるようにしておく
- 「最近注目のコンテンツ」というものとして検索する
- 投稿日で検索し、投稿日降順に並び替える
- 検索条件やソート順をMapやメソッドチェーンで与えるインタフェース
結論、記事にもあるが、2.は将来のことなどわからないので無駄な引数になりそうで、4., 5. は汎用的になりすぎてる感があるのは同意
ドメインを理解していれば3.にするのが理想的
個人的にはページを構成するコンポーネントの意味を意識しているので、リポジトリもその意味に合わせて切り分けておきたいので3.の方法がよさそうと感じる