This is version . It is not the current version, and thus it cannot be edited.
[Back to current version]   [Restore this version]

単位が異なれば同じ物でも異なるクラスになる#

一個売りしているリンゴ」をシステムで扱う場合、どのような属性が必要になるかを考えてみます。
  1. 品種
  2. 重さ
  3. 売り値
  4. 入荷日
などが考えられます。それでは、「一山(ひとやま)売りしているリンゴ」はどうでしょうか?
  1. 品種 (同じ山には同じ品種を乗せる前提)
  2. 重さ (一山あたりの総重量)
  3. 売り値 (一山あたりの総額)
  4. 個数
上記を較べてみると、同じリンゴでも違いのある事が解ります。処理を考えてみるとさらに明らかになります。
「一山売りしているリンゴ」では、「一個あたりの売り値(平均の売り値)を返す」というメソッドがすぐに思い浮かびます。
これらから解るように、「リンゴ」というクラスが設計段階、特に概念モデルで出てきても、それが一個なのか一山なのかを確定させないと正しいクラスとして設計できません。裏を返すと、同じリンゴであっても、それを扱う単位が異なれば異なるクラスとして設計する必要があるということです。

要件の中に出てくる単位を見逃さない#

前項で解るように、単位は非常に重要です。ここで言う単位というのは物理学で言うものではなく、業務を遂行する人たちがあるものをひとかたまりとして扱う大きさのことです。
  • 一伝票
  • 一明細
  • 一会社
  • 一箱
  • 一取引
など色々ありますが、人間が何かをひとかたまりとして扱い、そのかたまりの種類が異なる場合には必ず単位が異なります。もちろん、非常に汎用的な「一個」という単位はあちこちで出てきますが、その場合は「何々一個」というように聞き分けて設計していけば問題ありません。

実際のシステムでは一件クラスと一覧クラス#

単位が異なると言っても、実際のシステムではどう考えればいいのでしょう? 答えは簡単で、「『一件』と『一覧』は異なるクラスとして設計・実装する」です。『件』と『覧』というふうに単位が異なるからです。
例えば業務要件を聞いている中で「顧客会社クラス」が出てきた場合は、
  1. 「顧客会社一件クラス」
  2. 「顧客会社一覧クラス」
の二つの可能性があります。 顧客会社を一件のみ、つまり一会社として扱う時のクラスが「顧客会社一件クラス」です。複数件として、つまり顧客会社を一覧として扱う場合は「顧客会社一覧クラス」を作ります。一覧クラスは一件クラスを内部で複数持つように設計します。ほとんどのシステムにおいて両方必要です。
別の例を出しましょう。入荷予定の結果クラスである「入荷伝票」を考えてみます。

入荷業務で良く出てくる、

  • 入荷伝票
  • 入荷明細
は、「一伝票」と「一明細」というように単位が異なるので別クラスとして定義します。明細は商品単位の情報を持っており、一伝票が複数の明細を持つ形です。

さらに、

  1. 入荷伝票一件クラス
  2. 入荷伝票一覧クラス
  3. 入荷明細一件クラス
  4. 入荷明細一覧クラス
というように、それぞれ一件一覧というように4つに分けて設計します。
上記を見て、次のような設計でいいのではないかと気付いた人がいるかもしれません。伝票一件が明細一覧も請け負う形です。
ここだけの局面を見ればこの設計は正しいのですが、伝票に依存しない明細一覧オブジェクトを形成したい場合はうまくいきません。例えば、「伝票には関係せず、商品Aだけの明細一覧を表示する」というような要件に対応できないのです。そのため、伝票明細一覧クラスを必ず設計しておくようにします。

RDBならば一レコードと一テーブルが別クラス#

永続装置としてRDBを使うことが実際の開発では日常的です。この時には、RDBテーブル一つに対して
  • 一レコードクラス
  • 一テーブルクラス (複数レコードを扱う時のクラス)
を必ず対(つい)で設計・実装するようにします。 一レコードクラスは、前項で書いた一件クラスと同じ事です。物や結果の一件分がRDBテーブルの一レコードとして保存されます。
一テーブルクラスというのは少し解りにくいのですが、複数のレコードを扱う時に使います。複数のレコードというのは最大でそのテーブルの全件を持つことになり、言葉を換えると「一テーブル分」となります。これも前項で出てきた一覧クラスと同等です。
まとめると、
  • 一件クラス ⊇ 一レコードクラス
  • 一覧クラス ⊇ 一テーブルクラス
となります。それぞれ何が違うかというと、一件クラスまたは一覧クラスのうちRDBに永続化する必要のあるものが、一レコードまたは一テーブルという別の呼び方をされることがあるというだけです。永続化される必要の無いものは別名を持ちません。

単位が異なるとクラスが異なるという原則がこれで解ると思います。

添付ファイルの追加

ログイン済のユーザのみが添付ファイルをアップロード出来ます。

添付ファイル一覧

Kind Attachment Name Size Version Date Modified Author Change note
gif
apple_1ko.gif 2.2 kB 1 11-7-2011 03:13 ytp
gif
apple_1yama.gif 3.1 kB 1 11-7-2011 03:13 ytp
png
nyuuka1.png 0.9 kB 1 11-7-2011 04:41 ytp
png
nyuuka2.png 2.8 kB 3 31-12-2011 20:32 ytp
png
nyuuka3.png 4.6 kB 4 19-2-2012 22:30 ytp
png
nyuuka4.png 4.1 kB 4 19-2-2012 22:31 ytp
png
nyuuka5.png 8.8 kB 4 19-2-2012 22:31 ytp
png
nyuuka6.png 2.7 kB 2 31-12-2011 20:33 ytp
png
nyuuka7.png 4.0 kB 3 31-12-2011 20:33 ytp
png
nyuuka8.png 5.5 kB 1 19-2-2012 22:31 ytp
png
single_multiple.png 1.5 kB 3 31-12-2011 20:31 ytp
« This particular version was published on 11-7-2011 04:48 by ytp.