ことの始まり
昔、クリーンアーキテクチャ の学習用にリポジトリを作った。
そのリポジトリでクリーンアーキテクチャ を実装するとどうなるとか試していた。
で、正直あんまり理解できなかった記憶がある。
その時はこの辺の記事を読んでいたような気がする。
そして、久しぶりに当時のリポジトリを見てみて、なんとなく「起床する」をプログラムに落とし込んだらどうなるかなと思った。
「起床する」をプログラムに書いてみる
起床する。
アラームを止めて、目を開けて、ベッドから出る。
この一連の振る舞いを書いてみることにしました。
それぞれの動作に伴って状態を更新します。
状態を保持するデータストアがあって、そこに状態を読み書きするイメージです。
「起床する」のにデータストアは関係ないはず
データストアって「起床する」ことに関係ないと思っていて、どのデータストアを使っても良いわけですよね。
となると、データストアには依存しないコードになっていて欲しいと。
そういうわけでデータストアを扱う部分を抽象化してみようと試みたのですが、データストアへの読み書きのinterfaceを整えるの大変だなぁと感じました。
データストアに依存していても困らなくない?
で、考えてみると、データストアに依存しないコードになっていて欲しいけど、データストアに依存するコードになっていても良いのでは?
どのデータストアを使っても良いということは、データストアに依存しないと言う話と特定のデータストアに依存しちゃえば良いという話があるのではと思ったわけです。
データストアに依存しないことが利点になるのってどんなとき?
にしても、データストアに依存しないことが利点になるケースってなんだろうと。
ふと思ったのは、フルスタックな感じのフレームワークとかでは利点になるのかもしれない。
利用者が好きなデータストアを選べるとうれしいだろうなと。
他には、複数のデータストアを分散させて同じようなinterfaceで扱いたい時とかですかね。
最後に
結局のところ、アプリケーション次第なんだろうなと思いました。
実態に即したコードになっていれば良いんじゃないかと。
そして、自分がプライベートで書くようなコードにはそんな抽象化必要なさそうだなぁと。