★このページは書きかけです
メソッドはパラメータ(引数)を持つので、必要なオブジェクトをパラメータで渡すようにすればどのクラスのメソッドとしても実装できてしまいます。しかしそれでは、
保守しづらくなる理由は規則性がないからです。そして仕様変更に弱いのは、クラス間でオブジェクトを不規則に渡してしまうと、変更の影響が思わぬクラスに出てしまうからです。
原則は2つしかありません。
受注伝票は、商品ごとの受注個数と商品単価を明細として持ちます。この時、
クラス図は次です。
order3.png 受注総額を求めるためには、
関係するクラスは、
答えは簡単で、
どのメソッドをどのクラスに記述するのかの原則は2つだけ#
例えば- Aクラス
- Bクラス
- 両方の属性を参照しながら処理するメソッドはどちらのクラスに実装すべきなのか?
メソッドはパラメータ(引数)を持つので、必要なオブジェクトをパラメータで渡すようにすればどのクラスのメソッドとしても実装できてしまいます。しかしそれでは、
- 第三者が保守する時に解りづらい
- 仕様変更に弱い
保守しづらくなる理由は規則性がないからです。そして仕様変更に弱いのは、クラス間でオブジェクトを不規則に渡してしまうと、変更の影響が思わぬクラスに出てしまうからです。
原則は2つしかありません。
- コンポジット集約のような上下関係がクラスにある場合、必要な属性の最上位に当たるクラスのメソッドとする。
- クラスの関係が対等または並列である場合、第3のクラスを作ってそのメソッドとする。(Mediatorパターンの利用)
必要な属性の最上位に当たるクラスのメソッドとする#
この原則は簡単です。受注伝票で考えてみます。受注伝票は、商品ごとの受注個数と商品単価を明細として持ちます。この時、
- ある受注における受注総額を返すメソッド
クラス図は次です。
order3.png 受注総額を求めるためには、
- 各明細ごとの受注額を計算する(受注個数 × 商品単価)
- 全明細の受注額を加算する
- 受注額を返す
関係するクラスは、
- 金額
- 受注個数
- 商品単価
- 受注明細
- 受注明細一覧
- 受注伝票
答えは簡単で、
- 関連するクラスのうち最上位のクラス、つまり受注伝票クラス

添付ファイルの追加
ログイン済のユーザのみが添付ファイルをアップロード出来ます。
添付ファイル一覧
Kind | Attachment Name | Size | Version | Date Modified | Author | Change note |
---|---|---|---|---|---|---|
png |
inventory.png | 5.2 kB | 1 | 03-1-2012 00:06 | ytp | |
png |
inventory2.png | 1.9 kB | 1 | 03-1-2012 00:07 | ytp | |
png |
order_amount.png | 20.0 kB | 1 | 09-1-2012 22:22 | ytp | |
png |
order_classes10.png | 8.8 kB | 1 | 09-1-2012 22:22 | ytp | |
png |
order_classes11.png | 17.8 kB | 1 | 09-1-2012 22:22 | ytp | |
png |
order_methods.png | 14.2 kB | 2 | 31-12-2011 22:38 | ytp | |
png |
receipt.png | 6.1 kB | 1 | 02-1-2012 21:25 | ytp | |
png |
receipt2.png | 1.8 kB | 1 | 03-1-2012 00:07 | ytp | |
png |
receipt_inventory.png | 3.3 kB | 1 | 03-1-2012 00:53 | ytp | |
png |
receipt_inventory_seq.png | 11.5 kB | 1 | 03-1-2012 20:17 | ytp |
«
This particular version was published on 30-8-2011 22:20 by ytp.