asatoの技術的な日常日記

「成長に最大の責任をもつ者は、本人であって組織ではない。自らと組織を成長させるためには何に集中すべきかを、自らに問わなければならない」  非営利組織の経営 - ピーター・ドラッカー

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

コード進化パターン


 成長する全体は基本的で本質的な特徴をもっています。

 第一に、全体は、少しずつ成長していきます。

 第二に、全体は予測できません。成長が始まった時点では、それがどのように展開していくのか、どこで終わりをむかえるのかは、まだはっきりしないのです。なぜなら、全体それ自身の法則にしたがう成長の相互作用のみが、その継続と終わりを決めることができるからです。

 第三に、全体ははっきりとしたまとまりをもっています。真の全体は断片の集まりではなく、部分もまた全体を持っているのです。それは、夢の各部分のようにお互いに驚くべき複雑さでつながっています。

 第四に、全体は常に情熱に満ちています。というのも全体性それ自体が、私たちに働きかけ、心の底に届き、私たちの気持ちをゆり動かし、涙を誘ったり、幸せにしたりする力を持っているからです。

  「まちづくりの新しい理論」C. アレグザンダー

「コードの変化・進化には何らかのパターンがあるのか?」

このに回答すべく、二年前ぐらいから、少しずつパターンだと思われるものを抽出し、カタログ化しています。

 「Java におけるコード進化パターン

ここでの「パターン」の定義は、繰り返し発生するということです。進化のパターンとは、あるコードの状態に対して、何らかの要求変化に対応して、あるコードの状態に変化するということが繰り返し起こるということです。

ファウラーさんの「リファクタリングカタログ」は、そのような進化のパターンの例であると思います。

pattern.jpg


コードの進化のパターンの動機は、一つは、こうやってコードの変化を明示的に考えることがデザインについて学ぶことにつながると思うからです。

あるコードからあるコードへの変化は、何らかの変化によって引き起こされます。上の例では、コードの重複、つまり、getName/setName メソッドの重複をなくすことを動機に行わました。

リファクタリングの例からは、パターンがあることが分かると思います。

一方で、ありえないパターンを経験から推測することも可能であると思います。たとえば、java.util.Collections など static なメソッドのみを持ち、インスタンス化されることが意図されていないユーティリティクラスです。これらのクラスに対しては、interface を実装することになるような、変化のパターンは起こりません。したがって、(ちゃんと設計されているなら)Strategy パターンでいうところの Strategy の 役割を持つことはないのです

また、ユーティリティクラスに、static なメソッドが新たに追加される変化のパターンはあったとしても、通常のメソッドが追加されるような変化のパターンもありません。

このように考えると、あるコードに対して、起こりうる変化・起こりえない変化があることが分かると思います。現実世界における都市の成長の観点からいえば、まるで、ローソンのすぐ右隣にファミリーマートが建つことがないように、ソフトウェアにおいてもそのような変化・進化・成長のパターンがあるように思えます。リファクタリングは、この観点から言えば、全貌の一部しか捉えていないのではないしょうか。

したがって、コード進化のパターンのカタログ化の目的は、全貌をできるかぎり捉えようとすることです。

なぜか。

一つは、前述のように、学ぶためです。ソースコードを読むことで学ぶこともできます。しかし、棋士が棋譜から学ぶように、我々プログラマもある局面からある局面への変化から学ぶことがあるはずです。

もう一つは、単に学ぶだけでなく、考える材料になるためです。アスペクト指向などのモジュール化の考えは、従来のコードの進化のパターンを変化させます。再び将棋の例で言えば、もし、新しい駒が追加されたとしたら、あるいはルールが変わったとしたら、今までの定石や考えなどは、少なからず影響を受けます。ルールが変わったことにより、全貌は、デザインの指向・戦略は、どのように影響を受けたのか。そのような影響を調査するためには、従来の戦略がどうだったのかが知られれていると便利です。

スポンサーサイト

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://asatohan.blog77.fc2.com/tb.php/12-b5499911
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。