<< 実践 ソフトウェア・アーキテクチャ : パーティショニング | main | 実践 ソフトウェア・アーキテクチャ : 結合度を簡単に判定する >>

実践 ソフトウェア・アーキテクチャ : パッケージに凝集する

レイヤー構造にして、パーティショニングして、それでも要素が膨らむ場所は、サブパッケージつくって、コードの置き場所を明確にする。

関心事ごとに、入れ物が決まっていると、ソフトウェアが作りやすいし、理解がしやすく、変更も容易になる。

でも、実際には、こういう構造になっているのに、理解が難しく、変更が容易でないソフトウェアはたくさんあります。

よくあるアンチパターン

・ある入れ物に集めた要素(クラス)を眺めても、共通点がぴんとこない
・入れ物との名前と中身が一致しない(ものがある)
・関連するクラスに思えるのに別の入れ物に分かれている。

典型的なの悪い例が、 java.util パッケージ。 List と StringTokenizer と Timer が同じパッケージなのは、私にはわけがわかりません。

Timer は、関連項目 Thread と同じパッケージか、関連を明示したパッケージに置くべきだと思う。 

StringTokenizer は String に関連づけるべき。 まあ、String#split が追加されたので、状況は改善されましたが、今度は、String クラスが入れ物として膨らみすぎて、怪しくなってきている。

こういう「関連したものを集める」ことを凝集度を高める、と言いますね。

一番いいのは、事前の説明やドキュメントやコメントなしに、パッケージ名だけど判断でき、実際の中身も、名前と一致していること。(名は体をあらわす)

実際には、レイヤ、パーティション、パッケージ、それぞれ、どういう視点で関連するものを集めるかが、チームメンバー間で理解が違っていることが多い。

この状況の検知と改善には、パッケージ図が良いと思っている。

パッケージ図をちょっと描けば、すぐに理解の違いが明らかになるので、それをネタにいろいろ話をする。相手の考えを聞いたり、こちらの考えを伝えるには手軽で確実な手段だと思います。

コメント
コメントする









この記事のトラックバックURL
トラックバック
calendar
     12
3456789
10111213141516
17181920212223
24252627282930
<< September 2017 >>
システム設計日記を検索
プロフィール
リンク
システム開発日記(実装編)
有限会社 システム設計
twitter @masuda220
selected entries
recent comment
  • 番号より名前。 ニーモニックコードより名前。 【パターン】
    師子乃 (03/10)
  • Smart UI が優れている?
    masuda220 (03/10)
  • Smart UI が優れている?
    kagehiens (03/09)
  • オブジェクト指向プログラミングの教え方?
    masuda220 (12/05)
  • オブジェクト指向プログラミングの教え方?
    ZACKY (12/04)
  • 「オブジェクトの設計力」 スキルアップ講座やります
    masuda220 (08/14)
  • 「オブジェクトの設計力」 スキルアップ講座やります
    kompiro (08/14)
  • 「オブジェクトの設計力」 スキルアップ講座やります
    masuda220 (06/13)
  • 「オブジェクトの設計力」 スキルアップ講座やります
    JHashimoto (06/13)
  • 「オブジェクトの設計力」 スキルアップ講座やります
    masuda220 (02/28)
recent trackback
categories
archives
others
mobile
qrcode
powered
無料ブログ作成サービス JUGEM