ユーティリティクラスを作ってはいけない#
ユーティリティクラスと世間で言われるクラスを作ってはいけません。ユーティリティクラスというのは単なる関数やサブルーチンの集まりであり、データ構造を持たないクラスだからです。ユーティリティクラスというのをもう少し詳しく言うと、「クラス変数にもインスタンス変数にも一切アクセスしないメソッドを集めたクラス」のことです。クラス変数にもインスタンス変数にも一切アクセスしないということは、データ構造を内部に持たないと言うことです。
「クラスとはデータ構造」という原則に、これは明らかに反します。
例外的にユーティリティクラスを許す場合#
例外的にとは書きましたが、このケースは割と多く存在します。一言で言うと、別メモリ空間で稼働するシステムとの間でオブジェクトが持つデータを受け渡す場合#
です。抽象的な言葉過ぎて解りにくいと思うので例を使って説明します。![]() |
この時、実装すべきクラスは次のように2つです。
![]() |
- クラスの属性をRDBに書き込む
- クラスの属性をネットワークに出力する
- クラスの属性をテキストファイルに書き込む
![]() |
メディア | メモリ空間 |
---|---|
RDB | RDBMS |
ネットワーク | OS |
テキストファイル | OS |
![]() |
- オブジェクトが持っているデータ構造
- 相手側のシステムとの間で受け渡す処理
これをクラス図に描くと次のようになります。RDBユーティリティクラスが、受注伝票や発注伝票のデータのみを使ってRDBMSとの間で受け渡しを実施します。RDBMSは、アプリケーションが稼働しているメモリ空間の外にあります。
![]() |
「層」が増えるほどユーティリティクラスが必要となる#
前項で説明したように、外部のメモリ空間で稼働しているシステムとのやりとりが発生する境界ではデータ構造を持たないユーティリティクラス(関数)が必要になります。これは言い方を換えると、「RDB層」「アプリケーション層」などのような層(Layer)があればその境界線でユーティリティクラスが必要になるということです。つまりオブジェクト指向的実装を徹底しようとするならば、層は出来るだけ作らない方が良いということになります。
添付ファイルの追加
ログイン済のユーザのみが添付ファイルをアップロード出来ます。
添付ファイル一覧
Kind | Attachment Name | Size | Version | Date Modified | Author | Change note |
---|---|---|---|---|---|---|
png |
utility_class1.png | 5.3 kB | 2 | 01-7-2011 01:01 | ytp | |
png |
utility_class2.png | 6.4 kB | 2 | 01-7-2011 01:02 | ytp | |
png |
utility_class3.png | 8.3 kB | 2 | 01-7-2011 01:02 | ytp | |
png |
utility_class4.png | 4.3 kB | 1 | 02-7-2011 01:24 | ytp | |
png |
utility_class5.png | 4.5 kB | 2 | 02-7-2011 02:07 | ytp | |
png |
utility_class6.png | 30.7 kB | 1 | 05-7-2011 02:05 | ytp | |
png |
utility_class7.png | 9.6 kB | 5 | 31-12-2011 20:50 | ytp | |
png |
utility_class8.png | 12.3 kB | 5 | 31-12-2011 20:50 | ytp | |
png |
utility_class9.png | 7.4 kB | 1 | 22-7-2011 03:29 | ytp |
«
This particular version was published on 02-7-2011 02:19 by ytp.