blog.bouzuya.net

2020-11-25 Kotlin の拡張関数と DCI

前置き。この記事は日記であり Kotlin の拡張関数や DCI についての有益な情報は書かれていない。

なぜだったかな。今日は Kotlin の拡張関数 (extension functions) について考えていた。

そうだ。拡張関数をどこに置くべきか。拡張関数をどういうときに使うべきか。そも拡張関数があることを前提とした拡張関数のある時代の設計というのができているのだろうか。業務でコードを直していて「ここに拡張関数を使うべきか」の判断に迷ったことが拡張関数について考えていた理由だった。

拡張関数は static method を文法的に instance method のように見せるものだ。これは見方のひとつだ。文法的に obj.method の形で呼び出せると obj に属しているように見える。拡張関数はある (もしかすると拡張不可能な) クラスを拡張可能にするものだ。既存の例えば標準の String クラスを拡張 (操作を追加) することができるようになる。 fun String.method(): T = ...

後から拡張できる。どう嬉しいだろう。たとえば文脈に応じて操作を追加できると嬉しいのではないか。

すべてのユースケース・文脈の操作をひとつのクラスに詰め込むときっと fat になるだろう。どこまでクラスの外に出していいかは判断が難しいところだが状況が改善しそうだ。

「文脈に応じて操作を追加する」と考えていて DCI: Data-Context-Interaction を思い出した。そういえばそういうのもあったような……。 DCI で検索して記事をぱらぱらと見た。いまの業務のコードにもそういう視点を加えると……などと考えて Slack にメモを投げていたら寝るのが遅くなってしまった。

続きを書くかもしれないし書かないかもしれない。良い形に見えてきたら書くかもしれない。リポジトリ (Repository) というものについてもやもやと考えていることなども書くかもしれない。