Qiitaのトップページのフィードの設計
@ainame user.articles.preload(:comments, :stocks_count) みたいにstocks_countのようなassociationを生やしており、stocks_countの内部実装はPreloaderが弄られていてIDだけ取ってる
— 内製フレームワーク (@r7kamura) 2015, 8月 23
@ainame これを抽象化するために、Article.has_many(:stocks, counter: true) みたいにすると、article.stocksとarticle.stocks_countがほぼ同じSQLで同時に定義されるようになってる
— 内製フレームワーク (@r7kamura) 2015, 8月 23
@ainame それを実現している実装がこれです / k0kubun/activerecord-precount https://t.co/coWZsxY124
— 内製フレームワーク (@r7kamura) 2015, 8月 23
@ainame ActiveRecordのpolymorphic associationはその状況にも対応していて、同じtypeのものごとにクエリを発行するようになってるけど、手でやるともう少しだけ最適化できるな
— 内製フレームワーク (@r7kamura) 2015, 8月 23
@ainame Qiitaはこう pic.twitter.com/TBZlhHHH6f
— 内製フレームワーク (@r7kamura) 2015, 8月 23
@ainame あとactivityの中にbelongs_to(;article) じゃないものが存在するのでこれを使ってる / ActiveRecordでPolymorphicにPreloadする - Qiita http://t.co/ycB1VSGXKV
— 内製フレームワーク (@r7kamura) 2015, 8月 23
@ainame 閲覧可能かというの何も考えずにやるとポリシークラスとかまあなんでもいいけど述語メソッドとして定義して満足しがちで、単一のリソースに対してはそれでいいが権限のあるリソースの集合を取得するみたいな場合に破滅しやすいな #DDD中盤読みましょう #歯を食いしばれ
— 内製フレームワーク (@r7kamura) 2015, 8月 23
権限を加味した取得パターンはDDDに載ってはいるが結果的に解決策は載ってないので、そのとき人は歯を食いしばることになる
— 内製フレームワーク (@r7kamura) 2015, 8月 23
好きなドメインロジックを組み合わせて君だけの歯を食いしばろう
— 内製フレームワーク (@r7kamura) 2015, 8月 23