今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

週刊オブジェクト倶楽部

今週号は濃い!平鍋さんのパッケージ分割についてのリファクタリングノウハウが書かれている。個人的には最初が「凝集度・結合度」かな。大きくなってしまったパッケージは、次のような手順でパッケージを分割する。

  1. 凝集度と結合度をもとにクラスを分類する。
  2. おそらくいくつかのグループに分かれる。
  3. それぞれのグループをパッケージにする。

パッケージにするとき、同レベルの別パッケージにするか、サブパッケージにするかを検討する。例えば、jp.ne.hatena.diary パッケージがあったとすると、jp.ne.hatena.edit というパッケージにするか、または jp.ne.hatena.diary.edit にするかを検討する。
分類したグループに含まれるクラスの多くはもとあったパッケージに依存していることが多いので、サブパッケージにした方がよいと考えがちだったりする。でも、ここで頭をもうひとひねりする。もともとのパッケージとの依存関係をなくすことを考える。うまく依存関係をなくすことができれば、それはひとつのフレームワークとして成り立つ可能性が高い。(この件に関しては、フレームワークにしても使われる可能性があるかどうか分からないことから、XP的にはやらない方がいいというのが平鍋さんの意見のようだ。でも、オブジェクト指向の設計の練習としてはとてもいい題材なので、やることに価値があるとワタシは思う)
依存関係だけをサブパッケージに追いやる方法もある。うまいこと jp.ne.hatena.edit が作れたとする。でも依存関係が切れないクラスも残ってしまう。そういうクラスは、jp.ne.hatena.diary.edit パッケージにいれてしまえばよい。jp.ne.hatena.diary パッケージ内の、jp.ne.hatena.edit に依存するクラスという意味付けで jp.ne.hatena.diary.edit パッケージが存在することになる。

package jp.ne.hatena.edit
        編集フレームワーク
package jp.ne.hatena.diary
        日記フレームワーク
package jp.ne.hatena.diary.edit
        日記フレームワークのうち、編集フレームワークに依存がある部分