第30回 西日暮里.rb オブジェクト指向設計実践ガイド読書会

第30回 西日暮里.rbだった。

nishinipporirb.doorkeeper.jp

前回に引き続きオーガナイザーの高山さんが訳した『オブジェクト指向設計実践ガイド』の読書会という形式。

f:id:koic:20161114221809j:plain

オーガナイザーで訳者の高山さんはリモート参加という形で3章と4章が題材となった。

全体としては、オブジェクト指向設計を最も学んでた頃は静的型付けのある C++ / Java といった言語がベースを主流としていたので、動的型付け言語の Ruby でのオブジェクト指向設計の考慮点というか勘所を参加者からのいろいろな声で聞けて勉強になった。

その中でも個人的にはデメテルの法則についての理解が深まったのが収穫。

デメテルの法則自体は「自分の直接の知り合い以外と会話をしない」といったもの。メソッドチェーンをしたときに、途中の戻り値となるオブジェクトが直接の知り合いでないにも関わらず、そのメソッドを読んでいると直接でない知り合いの実装が変わったときに影響を受けてよくないという話。

Active Record のクエリビルダーや組み込みクラスなんかでメソッドチェーンする分には、メソッドチェーンした戻り値のオブジェクトも直接の知り合いなので問題がないが、アプリケーションでのドメインオブジェクトなんかだと戻り値のオブジェクトの型をプログラマーが意識しておく必要があるというのが動的型付け言語の難しい部分かなという感想を持った。

いずれのオブジェクト指向プログラミング言語をもちいるにせよ、このあたりの法則を守ることによって疎結合な設計になっていくという話。4章の最後の方に記された "オブジェクトの連鎖を知っていると、自身 (レシーバ) を特定の実装に縛りつけていてまずい" といったあたりが個人的にはテキストとして分かりやすくまとまっていて良かった。

あと書籍全体として例示しているコードや説明で「おや?」と気になる点は、先に進めば進むほどコードが改善されたり説明が足されて行くとのことで、最後まで読むことでいくぶんの疑問点なども氷解していくような作りになっている模様。