CleanArchitectureとMVPの雰囲気でRxJavaも加えて

最近、お仕事でリファクタリングをやっていて、やっと落ち着いてきた。
最近の潮流を取り入れてCleanArchitectureの雰囲気の中でRxJavaを使ってみた。

参考にしたのはこんな記事やリポジトリたち。
参照はできないけど隣に座っている方のコードもかなり参考にさせていただいた。(頭が上がらない)

それで、昨年末あたりに手を動かすためにapproomに適用してみていた。

がこれはホントに申し訳ないがめっちゃ中途半端な状態である。(最後のコミットが[wip] w

が、上の記事の日付からも分かる通り、2016年時点で割りとデファクトになりつつある手法であるので、基本的には豊富な記事とStackOverflowに助けられてリリースにこぎつけられそうな状態までもってこられた。

現状はData、Domain層の構築とPresentation層へのつなぎ込みまでができていて、Presentation層は実際は既存の構成ほぼそのままな状態。
Presentation層もきちんと作れればActivityのライフサイクルから切り離された純粋なViewのテストが容易になるので、少しづつ移行していきたいところ。

良かった点

そんなわけで良かった点は

  • Domain層が出来たおかげでデータ処理をActivityから切り離すことができた。
    • 例えば、この画面は追加でキャッシュを効かせるようにしたい、と言った変更を行う際に画面側に手を加える必要がなくなった。
    • UIの状態から切り離されたのでさくっとテストが書けるようになって、実際ずいぶんテストコードを増やすことができた。
  • 並列処理にRxJavaを使うことでデータの流れが簡潔になった。
    • 入れ子のAsyncTaskでActivityのメンバ変数にアクセスしてあれこれみたいな辛いコードが一掃された。
    • これはデグレの危険もあったけど、可読性が上がったのと前述のテストコードが増えたのとエラーハンドリングの改善で、メリットのほうが大きかったと思っている。

辛かった点

逆に辛かった点ももちろんあって

  • よくRxJavaは学習コストが高いと言われるけど、これは本当にそうで未だに膨大な情報と機能を全部把握できているとは言い難い。
    • 手を動かして事前に検証していたものの全然足りず、前半のコードを後半一部書き直したりしていた。
    • RxJavaと一口に言っているけどタイミング的にギリギリ採用したのがRxJava1系でメインストリームは2系に移っていくので、移行も考えないといけない。
    • でもまだ移行の必然性と言うまでは高まっていないので様子見。多分個人では今後2系を使うだろう。
  • このぎょーむをしている間、ひたすらIDEとUnitTestの結果を眺める日々だったので、ちょっとつらかった。

RxJavaのエラーハンドリング

ところで、RxJavaのエラーハンドリングが一番つらかった。
最終的にはテストコードで動きを確認して肌で覚えていったけど、どういう時は最後のObserverまでエラーが到達するのか、到達せずにExceptionが起きてしまうのか、最初は本当に良くわからなかった。

参照していたのは以下の記事たち。今読むと、分かる。

当時のメモ(つらそう

- toListする前にExceptionがおきると受け取る人がいないので落ちる
- single, firstは、Observable.emptyを返した時は対応できない。
  - singleOrDefaultなどdefaultValueを定義することで対応できる。
- Observable.createは予期しないExceptionに対応できないので、できるだけ使わない

そんな訳で、もうすぐこの改善が入ったアプリがリリースできそう。
たぶんパフォーマンスも上がっているはず。

MacBook Pro (13-inch, Late 2016)を買って2週間

MacBook Pro

昨年の終わりに家族共用のつもりで買いました。
メモリとCPUはもりもりしました。


経緯

家のメインマシンはこれまでBTOなWindows10デスクトップ機だったのですが、購入から5年目に到達して、そろそろ故障が怖くなってきました。
また、子供が生まれて、なかなかデスクトップの前に腰を落ち着けるスタイルが近年厳しくなっていました。

ただ、妻ともどもPCを使う機会はむしろ増えていて、
特に妻は関わっているNPOなんかの作業が思うようにできなくて、最近ストレス溜めていました。

おれ > ここはノートだ!
おれ > あたらしいMacほしい
おれ > もりもりしたら26マソいっちゃった//
~省略~
よめ > しょうにん

というわけで購入に至りました。


感触

仕事ではMacBook Pro 13インチ(Early 2015、同じくもりもり)を使ってるのでスペック上は大きくは変わらないですが、
それでも、ストレージアクセスが高速化したのは体感できる感じです。
Mac自体の立ち上げからアプリの起動まで、尽く速いです。
もっとも、それはEarly 2015でも一般的には十分速いと思います。

ちなみにWindows機はHDDだったので、この圧倒的な高速性能に奥さんはすでにご満悦です。

目下、こんな記事を読む方はTouchBarとバタフライキーボードとUSB-Cが気になるポイントじゃないかと思います。

TouchBar

これは、いろいろな記事の通りの使用感です。
面白い、が、使う機会がない・・
今後に期待ですね。

今やってるのが終わったらTouchBarアプリ作ってみようと思っています。

キーボード

2週間ほど使っていて、ようやく慣れてきました。
これまでより少し硬くなった感じがします。慣れてくると、これも悪くないかなという感じ。
力を入れすぎないことがポイントですね。パタパタ音は、します。

USB-C

USB-A to USB-Cなアダプタと、HDMI to USB-Cなアダプタを買いました。
全部入りなアダプタが人気なようですが、高価なのと故障リスクを考えて個別のアダプタにしています。
持ち歩いていつも繋がなきゃいけない周辺機器もないので。


まとめ

使っていくぞ!!