[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends-ml 11518] パッケージ分割 のタイミング( Re: : 「 UML モデ リングの本質」を読む会 第5回議事録)



高橋(徹)です。

   ""nemo_kaz" <nemo_kaz@xxxxxxxxxxx>"さんは書きました:
> 7.3.3 パッケージでくくる
>   図7-19 トリップクラスから商品interfaceを参照しているが、他の路線クラスな
どは、
>   facadeパターンが適応されているので、変更されても、
>   影響を受けないようになっているのか不明。
>   パッケージが最後に出てきたが、本当にこのタイミングでいいのか?
>   トップダウンなら、パッケージが先に作られるべきだと思う。

「アジャイルソフトウェア開発の奥義」(Robert C.Martin)の第20章
”パッケージ設計の原則”に、パッケージを作るタイミングについて
言及があります。

まず、パッケージとは何か、p.319を引用します。
”クラスというものは、小さなアプリケーションを体系化するのに便利な
ユニットだが、大きなアプリケーションを体系化するための主役として
使うには細かすぎる。大きなアプリケーションを体系化するには、クラス
よりも「大きな」ものが何かしら必要になる。それが「パッケージ」と
呼ばれるものだ”

著者のパッケージ設計に対する見解は次のとおりです。(§20.4)
”パッケージ構造はトップダウンで設計することは不可能なのだ。”
”パッケージ依存ダイアグラムがアプリケーションの機能を表現するという
ことはほとんどない。そうではなく、それはアプリケーションのビルド方法
を示すマップだと言える。こんことが、パッケージをプロジェクトの最初で
設計しない理由である。”

前後にとても深い議論があるので、この章だけでもお薦めです。

トップダウン設計では、機能分割(サブシステム分割)を行っていきますが
この分割単位はパッケージではないということです。
トップダウンでは、やはりクラスを単位として設計し、その結果をビルド、
再利用の観点で体系化するボトムアップの結果としてパッケージが登場する
のかと思われます。

しかし、別な観点もあります。「実践UML」(Craig Larman著)では、
レイヤー・パーティション分割によって、分析から設計へと進めていきます。
レイヤー、パーティションともにUMLのパッケージを使用しています。
こちらはトップダウン的なパッケージの使用であると思います。
なお、レイヤーは、アーキテクチャ・パターンとして挙げられています。

どちらがよいのか議論はいろいろあるかと思います。僕個人の経験としては
初期にレイヤー・パーティション分割を行った方が設計がしやすい、ただし
実装後、保守を行う観点で再度パッケージ分割を見直すことが欠かせない、
というところです。


---
TAKAHASHI Toru