ずっと気になってはいたが2つ~3つくらいしか知らなかったデザインパターンをやっと勉強する気になったのでこのサイトを一通り眺めてみた。

https://refactoring.guru/ja/design-patterns

こちらのサイトは平易な文章とわかりやすい例で説明がされていて、各言語でのサンプルコードも載せてくれていたのでかなりサクサクと理解できてとてもよかった。(各パターンをC#, C++, Go, Java, php, Python, Ruby, Rust, Swift, TypeScriptで実装した例が紹介されていた)(すごい)

自分のデザインパターンとの向き合い方について

周りのエンジニアにデザインパターンについて聞くと、

  • すべてのパターンが今も有用かと言われるとそうでもないかも
  • よくある設計パターンの共通言語として知っておくとコミュニケーションの効率があがってよい
  • 暗記までする必要はなくて設計のときの参考程度にするとよさそう

みたいなことを言っているのをよく聞くのですべてを自分のものにするというよりは軽く雰囲気を理解するくらいのテンションでサイトを眺めてみた。

感想

一通り眺めてみて、以下のようなことが重要なんだろうなと感じた。

  • interfaceをうまく使って抽象に依存する
  • データと振る舞いを分離する
  • 依存の方向に気を付ける

いろんなところで言われていることだが、やはり責務の分離や単一責任の法則を意識することで変更しやすいコードにしていくことがよりよい設計に繋がることを再確認できた。

いいコードを書けるようになるにはこれらのことを意識しながら実際にコードを書いて実践していくことが重要だと思うのでたくさん試行錯誤していい感じのコード書き力を身につけていきたい。(とても経験豊富な先輩エンジニアも結局自分でサービスを運用して設計の失敗の痛みを感じるのが一番成長できる、というようなことを言っていた)

設計関連だと 良いコード/悪いコードで学ぶ設計入門 ―保守しやすい 成長し続けるコードの書き方 とか Clean Architecture とかも気になってるので読みたい。