assaulter's diary

主にバイクについて

オブジェクト指向の修行中

このスライドをバイブルにAndroidJavaのコードを書いてます。

このスライドが紹介している、オブジェクト指向が身につくプラクティスの元ネタはこの書籍に載ってるらしいです。
ThoughtWorksアンソロジー ―アジャイルとオブジェクト指向によるソフトウェアイノベーション

ThoughtWorksアンソロジー ―アジャイルとオブジェクト指向によるソフトウェアイノベーション

 

オブジェクト指向が身につく9つのプラクティス

具体的にはこんな感じ。

  1. 1つのメソッドにつき、インデントは1つまで
  2. else句を使用しない
  3. すべてのプリミティブ型と文字列型をラップする(ex.得点や制限時間をクラス化する)
  4. 1行につき、ドットは1つまで
  5. 名前を省略しない
  6. エンティティを小さくする(50行を超えるクラスを作らない, 10ファイルを超えるパッケージは作らない)
  7. 1つのクラスにつき、インスタンス変数は2つまで
  8. クラスにはコレクションを1つだけ持たせる
  9. getter, setterを使わない

うーん。。。どうですか???厳しくないですか?

というわけでゆとり仕様

上のスライドの後半に載ってますが紹介だけ。

  1. 複雑度10まで
  2. 1メソッド20ステートメント(コメント等を除いた行数)まで
  3. 1クラス80ステートメントまで
  4. ネスト段階まで
  5. setter使用禁止
  6. フィールドつまで

項目5以外はjavaのメトリクス計測プラグインで測定可能なので、しきい値を設定して、オーバーしたらアラート出すようにしています。

プラス俺ルール

ここから個人的に追加した縛り。

  1. クラスの複雑度の平均 < 5
  2. 重複コード0.0%
  3. 凝集度 < 0.5 (どの程度が良いっていう参考資料がなかったので、適当に設定)

1, 2は分割していけばクリアできるのですが、3が難しい。

上のスライドのp81〜に紹介されている「単一責任の原則」「依存関係逆転の法則」がまだできてません。

ここをサクッとやれるようになればレベル上がったと言えるのかなぁ。

なんか風邪ひいたっぽいので、具体的にどうリファクタしていったかについてはまた今度書きますね。では。