読書管理アプリのDBを整えました!
設計勉強することでコードを書くことから逃げようとしてるのではと思い、コードを書き始めたふぇりです。
今回、LocalとAPIのデータを混合してDaoのようなものを作っていたのですが、
今後のメンテナンスのしやすさだったり、n年後の自分がこのコードを見たときに黒歴史認定してしまうような可読性の低さになってはいけないなと思い変更しました...!
変更点としては
変更前
・自身の中でAPIへアクセスするロジックと既存のDB(Realm)にアクセスするロジックを含み、全体的に長い。
・ロジックがとても読み取りづらく、理解に時間がかかる(初見だと)
変更後
・既存のクラスは全て削除し、RemoteとLocalでinterfaceを作り、LocalBookDataとRemoteBookDataというクラスを作りそれぞれinterfaceを実装しする。
・新しく作成したRepositoryクラスにてinterfaceのクラスでインスタンスして、RepositoryではデータのキャッシュとLocal,Remoteどちらからデータを取るだけの分岐のみを行うということにした。
上記の変更を加えることによって、得られたメリットとしては、
・データの分岐はRepositoryにあり、分岐とキャッシュの処理しかしていないためデータフローが追いやすくなる。
・利用側にデータがどこから取られたかという関心を向けさせず、またLocalとRemoteをinterfaceを介して処理しているので、クラス同士が疎結合でテストのしやすいコードになる。
という点が挙げられます。
デメリット(?)としては、クラスごとに関心を外側に向けないようにコードを書いていくことを強く意識する事と適切にRemoteとLocalを切り分けるようによく考える必要性があることくらいだと思います。
上記のデメリットは何をするにもあることだし考えるほど成長できそうなので、個人的にはメリットですが...
色々相談に乗ってくださった方ありがとうございます!
ますます完成させようという意欲が強くなりました...!
おそらくn日後にはデザインという壁が目の前にそびえていることでしょう!