Implementation Patterns勉強会第3回
今回は5章ClassのImplementorから6章StateのExtrinsic Stateまで。
5章Class
- オブジェクト指向言語のJavaにも関わらず、まるでCのような手続き型プログラムを書く輩は結構多い。私はこういう奴を「なんちゃってJava野郎」と呼んでいる。
- Inner Classってどんな時に使うのか?と議論した。私の場合はParameter ObjectとしてInner Classを利用することが多い。とはいえ、そんなに使うことはない。
- 「Instance-Specific Behaviorってよく分からん」という意見をきっかけに議論した。ようは、インスタンスによって処理を変えるということであり、この後のConditonalからAnonymous Inner Classのイントロダクションとなっているということ。
- Conditionalはリファクタリングでいうところの「不吉なにおい」の例といえる。
- Pluggable Selectorはようはリフレクションのこと。参加者で「C++でPluggable Selectorもどきを作るようお願いしたところ、担当者から「Javaなら簡単なのに」と言われた」という人がいた。そりゃそうだろう。
6章State
- StateといってもStateパターンのことではなくて、状態保持全般のことを指している。
- Direct Accessの例で、doorRegister = 1;なんてのがあるが、ありえんでしょ、こりゃ。しかし、MESSAGE_NO245 = 245;なんて定数を見たことがある。定数にした意味ねえだろ!
- Indirect Accessにおいてsetterのパラメータは1つだが、setter内では単にフィールドへのセットだけではなく、プラスアルファの処理をしている例があった。よくあるケースだが、"it is easy to forget to maintain the implied constraints"とある。うーん、確かに。
- Indirect Accessメソッドが用意されていても、あえて使わないケースもあるだろうという意見。こんなときこそコメントの出番。あえて使わない理由を書かないと保守する人が困る。
- Common Stateで"Sometimes I am tempted to introduce a field that is only used by a subset of the methods in an object..."とある。こういったケースでのフィールド使用は一種のグローバル変数だろう。
- Variable Stateって使ったことない。サンプルコードではMap
型のフィールドを用意して、そこに名称と対応する値を入れている。しかし、値の型がまちまちになっている。これってどうかね。値を使用する際にキャストしなければならないし。