概要
Thought Worksアンソロジー という本でオブジェクト指向エクササイズが紹介されている.
ソフトウェアの設計を改善できる9つのルールが紹介されている.
このルールの良し悪しについては,様々なところで紹介されているので,そちらを参照されたい.
- オブジェクト指向エクササイズのすすめ
- おすすめオブジェクト指向練習方法
- 【Jeff Bay】オブジェクト指向エクササイズがキツすぎて
- なるほど、やりたくなる!オブジェクト指向エクササイズ
- オブジェクト指向エクササイズをやってみる
これらを踏まえて,実際にオブジェクト指向エクササイズを実践するためには,1つ大きな問題がある.
どれくらい遵守できているかを確認する術がないのである.
もちろん,目視で確認はできるが,全てのプログラムを確認することは非常に困難であるし,メソッドの数や行数など,数えてられない.
逆に,ルール自体はしっかりと決まっていることから,プログラムで確認することは可能であるはずである.
探してみたところ,そのような確認ツールを見つけられなかった.
ということで,確認ツールを作ってみた,という宣伝である.
なお,その作成に当たり,オブジェクト指向エクササイズを実践してみた.
9rules
https://github.com/tamada/9rules にて公開しているツールである.
Java のソースコードを対象にし,オブジェクト指向エクササイズの9つのルールに違反している箇所を指摘するツールである.
インストール & 使い方
$ git clone https://github.com/tamada/9rules.git
$ cd 9rules
$ mvn package
$ java -jar target/9rules-1.0-SNAPSHOT.jar -h
java -jar 9rules.jar [OPTIONS] <ARGUMENTS...>
OPTIONS:
--strict: Strictly level check (Default).
--general: General level check.
--rough: Rough level check.
--help: Print this message and exit.
ARGUMENTS:
Directories include Java source files, and Java source files.
$ java -jar target/9rules-1.0-SNAPSHOT.jar src/main/java
依存ライブラリ
- Runtime
- Unit Test
特徴
できること
- 9つのルールを満たしていない箇所(ファイル名,行数,違反しているルール)を出力する.
- ルールを緩和して確認できる(Strict, General, Roughの3パターン.デフォルトは Strict)
できないこと
-
ルール5 名前を省略しないこと
は未実装.- WordNetを使えばできるとは思うが未対応.
-
ルール6 全てのエンティティを小さくすること
の1パッケージ10クラスまでも未実装.- 他のルールと調査方法が違うため.調査自体はそれほど難しくはないものの,他のルールとの調査方法とどうやって合わせようかなと考え中.
オブジェクト指向エクササイズをやってみて
遵守のために必要なこと.
- Java 8 以降.
- Stream API必須.
- for文使うだけで遵守が非常に難しくなる.
- Stream API必須.
- デザインパターン.
- Strategy など必須.
- 中でもVisitorパターンは必須.
- 典型的には,toString などで,フィールドにあるオブジェクトの中身を取り出したいときに必須.
遵守が非常に難しいもの.
- 例外のキャッチが難しい.
-
ルール6 全てのエンティティを小さくすること
のメソッドは3行以内を遵守することが非常に難しい.- try-catch はブレース(
{}
)を省略できない.
そのために,try, catch, 閉じ括弧で3行を消費してしまい,try-catch間,catch節の中身を別の行で書けない.
- try-catch はブレース(
-
- SonarやSpotBugsの警告も解決しようと思うと,コンフリクトが起こる場合がある.
- 1行に1つの内容のみにするよう警告が出されるため,try-catch でコンフリクトが起こる.
- これはどうやって解決するか,今でもわからない.