EpoxyとGroupieを使ってみてた所感
こんにちは!ふぇりです。
今回は EpoxyとGroupieを軽く触ってみて思ったこと感じたことを言葉にして残しておきたいと思います。
両者ともRecyclerViewのライブラリで、一般にGroupieはDataBindingを使わなかったり、軽いアプリなどを作る際に使う。
EpoxyはDataBindingを使うときに便利とか
modelを自動生成してくれるから大きいアプリでもそこまでファイルが増えたりしない。
みたいなことを言われがちだと思います。
私自身Groupieしか触ったことなくて、その違いがいまいち自分の中で、飲み込めていなかったので、EpoxyでDataBindingを使ったアプリ実際に作ってみました。
https://github.com/felix925/AnimalPreview
そこで、感じた大きな違いは色々ありました。
・RecyclerViewのxmlがGroupieは従来のRecyclerViewでEpoxyはEpoxyRecyclerViewという点
・GroupieはRecyclerViewのadapterを便利にしてくれるイメージ Epoxyは根本からRecyclerViewをより短く簡潔に書けるようにしたイメージ
・Groupieはやろうと思えばModelを色々いじれる EpoxyはControlerから直で弄るというよりは、BindingAdapterとかを使って、極力データを渡すことに注力してるイメージ
ほぼほぼ自分の使ってみてのイメージですが、、、まず、1つ目のRecyclerViewのxmlがGroupieは従来のRecyclerViewでEpoxyはEpoxyRecyclerViewという点では、xmlでの宣言がそもそも違うといった部分です!
ここで結構感じるものがあって、Groupieは既存のものをより使いやすくする。Epoxyは既存のものを拡張して独自に作って使いやすくするみたいな方向性があるのかななんて感じました。
2つ目は、便利にする範囲的な部分だと思います。GroupieはAdapterにGroupieを用いて作った ItemやAdapterを繋いであげる感じで、既存のRecyclerViewから乗り換える際は便利だと感じました。
また、Epoxyではそもそも横スクロールと縦スクロールを共存させたりといった部分をできるような設計(?)になっているようで(airbnbのアプリのような)根本的なRecyclerViewそのものを使いやすくしたイメージです。RecyclerViewから乗り換える時は規模にもよりますが、Groupieよりは工数がかかりそう?
3つ目は、Adapter(Controller)でできる範囲みたいな話になります。
浅い使い方なので、もしかしたら使う方法があるかもしれませんが、書いていきます。
Groupieはbindingを使って色々ごにょごにょできるのですが(FragmentでDataBindingを使うようにImageViewとかにGlideで画像を直接ロードさせたりビジネスロジックマシマシにしたり)
Epoxyはデータの引き渡しに注力しているようで、DataBindingでデータを渡す最低限の部分を見せているようなイメージです。
画像を読み込む際などは、BindingAdapterを使って読み込むなどの対策が必要なのかなといった所感です。
EpoxyはGroupieでいうItemを作らなくていいといった点はすごく便利だと思いますし、
GroupieはItem内でbindingであれこれできたり、既存のRecyclerViewからの乗り換えが楽みたいな部分も魅力的です。
結局どちらが優れている劣っているという話ではなくて、リスト表示する際にMPChartを使ってチャート表示したいとか色々要件は無限に出てくると思うので、
どちらが自分、チームメンバーにとって使いやすいか、メンテナンスしやすいかブラックボックスな部分をどれだけ減らせるかみたいなところを考えて採用していくのがベストなのかなと思います。(これはこのライブラリなどに限った話ではないかもですが。)
まだまだ深い部分の理解が足りていないので、深く理解できた際に、再度もっと踏み込んだ内容を書いていきたいなと思っています。