2007/03/24

[Java]Code Value Type

とあるコード値を受け取るとき、そのフォーマットが正しいかどうかをチェックする必要が出てきて、コードが無駄に増えるし、チェック内容にぶれがある。それに、パフォーマンスが悪くなる。
という相談を受けた。適当に、顧客コードというものを仮定して、形式を考えてみる。
顧客コードの形式
名前桁数意味と形式
法人/個人10,1のどちらか
番号80~99999999までを、ゼロ埋めしたもの
チェックサム1妥当性検査用。0~9のどれか

単純にStringとして使っていた場合の問題点を挙げてみる。
#上で相談してきた内容そのものなんだけど
適当な文字列も渡せるので 桁数、各桁の文字がとりうる値、チェックサム のそれぞれをチェックする必要がある。そうすると、メソッドやコンストラクタは受け取った顧客コードを常にチェックを行う必要がある。妥当性チェックの内容を"数字としてパースできるか?"のように中途半端な上に体系の変更に対応できない形で勝手に実装する人が出てくる。チェックにかかるコストが無駄になる。

んで、対応はというと、顧客コード型 というクラスを作ってしまうこと。そして、そのインスタンスを生成する段階で、文字列の妥当性チェックを行う。内部で使うときは、Stringではなく、顧客コード型で使用する。これで、間違ったものを渡そうとした時点でコンパイルエラーになるし、チェックは外部(画面とか、ファイルとか、DBとか)から文字列として受け取る箇所だけでいい。体系変更があった場合、一箇所を直せばいい。あと、toStringメソッドが文字列表現を返すようにしておくと、出力が楽になるのでオススメ。

そのほかのメリットとしては、法人/個人の区別を知りたい というような内容を、顧客コード型のメソッドに実装できること。この手のユーティリティがstaticメソッドとして大量に作成されているプロジェクトでは、同じユーティリティがいくつも作成されているのを見かけることが多い。

ラベル:

0 件のコメント:

コメントを投稿

登録 コメントの投稿 [Atom]

<< ホーム