エンジニア日記

プロダクト開発をしてるアラサーエンジニア

「良いコード/悪いコードで学ぶ設計入門」読みました。

勝手に評価
ジャンル 設計、デザインパターン
概要 一人でクラス設計、メソッド設計を行えるようになるためのテクニック。 著者はリファクタリングを得意とする方で、リファクタリングを多く経験するなかで得た良い設計、悪い設計の基準を分かりやすく解説しています。
レベル 初級

イメージの付きやすい例(RPGゲームや金額計算)を題材にサンプルコード(Javaで書かれています)が記載されていて読みやすかったです。

この書籍を読んでまず第一に感じたことは、オブジェクト指向を強く意識されている書籍だなと感じました。
そのため、オブジェクト指向を前提に開発しているプロジェクト、かつもっと良いクラス設計、メソッド設計(もっと良いコード)を書きたいと考えている方にベストフィットするかと思います。

この書籍の根本として、神クラスは悪であり、どうすれば神クラスを根絶することが出来るのか。に重きを置いて解説されています。 プロジェクトの規模によっては、神クラスがあった方が実装スピードが向上する場合もあるかと思うので、そこはトレードオフでしょうか。

また、コメントや命名(クラス名、メソッド名)について触れられている章がいくつかあり

  • userInfo(ユーザ情報、info必要?)
  • isMemberHpMoreThanZeroAndIsMemberCanActAndIsMemberMpMoreThanMagicCostMp (引用:メソッド名長すぎ問題)

といったよく陥る命名の悩みの解消法についても記載されています。

勉強になったこと

凝集度

凝集度は、モジュール内における、データとロジックの関係性の強さを表す指標です。

クラス内で保持している変数が、そのクラス内のメソッド内とどれほど強く結びついているか。この結び付きが強いほど凝集度が高いと言える。 クラス内の変数を他クラスと結びつくような実装は避けること。

結合度

結合度は、モジュール間の、依存の度合いを表す指標です。

クラス内で利用される他クラスの数のこと。多くなるほどそのクラスを修正する際の影響範囲が大きくなる。 基本的にはクラスは単一責任を持つこと。他のクラスの機能を多く使っている場合はクラス設計を疑ってみる。

フラグ引数は使わない

引数にbooleanやint等のフラグを受け付け、呼ばれたメソッド内でそれぞれのフラグに応じた条件分岐処理を記載しないこと。

見通しの良い見栄えにする

for内でifを利用する場合など、continueやbreakを併用し見通しをよくすること。

if条件に否定形は避ける

if (!isEnabled()) {} // ×
if (isDisabled()) {} // 〇

リファクタリングについて

今担当してるプロジェクトで、プッシュせずにローカルでリファクタリングをしてみる。 この方法が一番勉強になる気がする。

今後はデザインパターンの勉強もしよう。