『Java言語で学ぶデザインパターン入門』を読んだ&Pythonで書いてみた

リアクティブプログラミングが流行ってるみたいだからちょっとやってみるか、と調べてみたら、Observerパターンとかいうのが出てきた。でもデザインパターンとかわからん\(^o^)/

というわけで読んでみた。ただ読むだけだとつまらないので、JavaのサンプルコードをPythonで書いてみた。

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門

PythonのコードはGitHubに上げてあるので、興味のある方はどうぞ。

who-you-me/design_pattern · GitHub

読んでみて、Pythonで書いてみて感じたこと

外から叩けるメソッドはできるだけ少なくして、意図しない操作をされるのを防ぐべきだよ! みたいなことが何度も書かれていたけど、Pythonだとそこを意識することはあまりない。というか、メソッドや変数のアクセス権についてあまり気を配っていない(少なくとも入門書のレベルでは)ように感じる。

そこはまあ、Pythonに限ったことじゃなくて動的言語全般にある程度共通していることで、「大規模でメンバーの技量がバラバラなプロジェクト/プロダクトは静的言語がよい」「少数精鋭でスピードが重要な場合は動的言語がよい」みたいなことが言われる背景でもあるんだろう。

「コードの一部への変更が他の部分に意図しない影響を及ぼす」のに対処する必要があるけど、静的言語の場合は型に守られてるから安全、一方で動的言語の場合はテスト書いてカバーする必要がある、という区別にも繋がってくる。

なんて、いろいろ思うことはあるけど、名著だけあって身になることが多かった。軽く列挙。

  • 当たり前だけど、クラスの設計って超大事
    • 普段フレークワークを使ってWeb開発してるばかりだと、実はあまり気付かない
  • パターンがたくさんあって、複雑なものもあり覚えるのは難しいけど、こんなのがあるって知るだけでも役立ちそう
    • 何か設計上の問題にぶち当たったとき「あれ、そういえばこんなデザインパターンがあったような…」と気付いて調べられるかどうかでものすごい違い
  • Pythonでちゃんとオブジェクト指向やるためのもろもろがわかった
    • これは本のおかげというよりは、自分で書いてみたからだけどw
    • Python2.6からabcモジュールが追加されて抽象クラスが作れるようになった

技術的負債が溜まりに溜まったコードとお付き合いすることが多いこともあって、最近は最先端技術を追っかけるよりも、「ちゃんとした設計でものを作る」ことに興味が移りつつある。

特にデータモデリングの重要性なんかは痛感しつつあるので、次はこれとかを読みたい。