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

★このページはまだ書きかけです。

様々なクラスで再利用可能なのが小物クラス#

粒度が非常に小さいクラスのことを小物(こもの)クラスと私は呼んでいます。次のようなものです。
  • 数量
  • 金額
  • 日付
  • 氏名
  • 宛先
  • クレジットカード番号
  • 電話番号
などなど。
これらは、他のクラスの属性として使われることを前提としています。そのため、極めて汎用的に設計しておく必要があります。その代わり、一度作ってしまえばシステムや時代ををまたがって再利用することが可能です。

数値系クラス#

まずは以下のクラス図を見てください。
numeric.png
たかだか数量や金額にこんなにたくさんのクラスが出てくるのか、と驚く人もいるでしょう。図に出てくるクラスとインタフェースを列記します。
  1. 数値
  2. 数量
  3. 金額
  4. 通貨
  5. 円貨金額
  6. 消費税率一覧
  7. 消費税率
  8. 海外通貨金額
  9. レート一覧
  10. レート
  11. MoneyExchanger (両替)
※通貨は数値系クラスではありません。
順に見ていきましょう。

【数値】#

数値系全てのクラスの最上位に位置するクラスです。数値を取るクラスを汎化して抽出されたクラスです。
内部では、各言語が持っている十進数クラスを利用することになります(Javaではjava.math.BigDecimal)。その上で、
  • 業務上必要な演算処理(例えば四則演算)
  • カンマ区切りの文字列を編集して返す
等の処理を実装します。こうすることで、文字列編集用の関数を別途用意する必要がなくなり、さらに、画面・帳票・バッチとありとあらゆるプログラムで共通利用することが可能となります。

【数量】#

数量クラスは、
  1. 数値
  2. 単位
の2つの属性から出来ています。例えば、
  • 3個
  • 10kg
  • 43坪
などの情報を持つことになります。
システムの性格にもよりますが、デフォルトの単位を「個」にしておくと便利でしょう。
そして、
  • 単位付きの文字列を返す
という処理を持たせます。上記で書いた例のような文字列そのものが返ってくるのでとても便利です。

金額クラス#

商品単価クラスが持っている金額クラスを考えてみます。日本の通貨である円を前提にするならばクラスにするまでもなく、intなどの整数属性として持てばいいように思えます。
しかし金額クラスとして定義しておけば次のような振る舞いを持たせることが可能になります。
  • 消費税金額を返す
  • カンマと通貨記号で編集した文字列を返す
日本において消費税計算は特に重要で、計算の基となる情報として「消費税区分(内税/外税/税額)」が必要になります。「税額」という区分値は、その金額が消費税自体を表す時に使います。また消費税率も必要ですが、これは全オブジェクトで共通なのでクラス変数として定義します。
これらを反映したのが次のクラス図です。
amount_class.png

日付クラス#

日付クラスは何かが実行された年月日を持っているクラスです。
日付クラスはとても汎用的に設計する必要があります。例えば、区切り文字で日付を編集した文字列を返すメソッドを実装するにしても、スラッシュ(/)で区切るメソッドやハイフン(-)で区切るメソッドなどいくつか必要になります。また、
  • 翌日の日付を返す
  • 翌月の日付を返す
  • 翌年の日付を返す
なども持っていると使う側が便利です。
特に会計システムなどでサイト計算が必要な場合は、
  • xx日後の日付を返す
というメソッドも持ちます。
日本でのみ使われる前提のシステムの場合はロケールを意識しなくて済みますが、グローバルシステムの場合はシステムが稼働しているロケールも意識して日付編集を行う必要が出て来ます。
上記クラス図で解るように日付クラスは色々なクラスから利用されるため、色々な可能性を考えて設計する必要があります。

添付ファイルの追加

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

添付ファイル一覧

Kind Attachment Name Size Version Date Modified Author Change note
png
date.png 3.9 kB 2 20-8-2011 18:12 ytp
png
numeric.png 29.0 kB 8 31-12-2011 20:01 ytp
png
numeric2.png 7.2 kB 3 31-12-2011 20:04 ytp
png
volume.png 2.2 kB 1 18-8-2011 00:51 ytp
« This particular version was published on 24-7-2011 02:14 by ytp.