Practical Objected Oriented Designを読む 3・4章


Practical Objected Oriented Designを読んでの感想を書いていくシリーズです。今回は3・4章を書いていきます。1・2章についてはこちらに書いてあるのでもしよければご覧ください。


3章 Managing Dependencies

前章でクラス分割することでシンプルにすることを提示していたが、今後はそれらが依存しすぎた状態だと結局1つのコードベースになっていて、1つのクラスを変えると別のクラスを変更する必要があるという問題提起がされている。

いくつか方法があるが、ここでは

  • Dependency Injectionで減らす方法

  • Duck Typing(5章で詳しく説明されるようだ)を使いながら、ある特定メソッドを持っていることだけに関心も持つことでClass間の依存関係を減らす

  • Dependencyを独立させる

    • あるclassに依存してそれをinitializeしているときに、それのinitialize処理をメソッドとして切り出すことで変更範囲を一つに絞る

  • initialize時の引数順番の依存性を回避する

    • Ruby2から使えるkeyword argumentを使おうという話

  • Dependency Directionについて

    • ここはちゃんと理解できなかった。class間の依存の方向性があって、それを適宜変えていけるようにしましょうという話な気がする

などが解決策として提示されていた。

4章 Creating Flexible Interfaces


objectも大事だが、messageが大事。その方向性がわかりやすいと管理しやすいという主旨が書いてある。Rubyでinterfaceといえば、Duck Typingだがここではその前にmessageとより広い意味でのclassという視点から柔軟なinterfaceについて考察されている。

ここではシーケンス図でobject間のやりとりを図時していた。例えとして面白いなと思ったのは、レストランでお客さんはメニューから何が出てくるのかは知っているが作り方は知らなくてそれの工程について指示することはない。object designでも同様に、他のobjectの具体的な処理について指示を出すようなものは依存性が高いと言えるとあってわかりやすかった。

それを無くすたえの方法がmessageに着目していくと依存性が高いのかが見えやすくなるとのことだった。ここでは、旅行者が自転車を借りて旅行する時をobject designしていたが、例えが理解しやすいテーマでよかった。

おわりに

ところどころ、理解が進まない箇所があって完全に消化できないところがあったが出てきました。途中からは日本語訳の時に読んでない箇所なのでそれもある気がします。

次回からはDuck Typingと気になるところに言及されていくので楽しみにしています。ではまた!