At line 1 added 5 lines |
!!関数を作ってはいけない |
__関数__というのは、Cなどの手続き型言語で言う関数のことです。\\ |
関数を正確に表現すると、「__クラス変数にもインスタンス変数にも一切アクセスしないメソッド__」のことです。クラス変数にもインスタンス変数にも一切アクセスしないということは、そのオブジェクトが持つデータ構造に依存しないことになります。\\ |
「クラスとはデータ構造」という原則に、これは明らかに反します。関数を作ってしまうとデータ構造と処理が分離されてしまい、保守性が下がってしまいます。\\ |
|
At line 2 changed 5 lines |
ユーティリティクラスと世間で言われるクラスを作ってはいけません。ユーティリティクラスというのは単なる関数やサブルーチンの集まりであり、データ構造を持たないクラスだからです。\\ |
ユーティリティクラスというのをもう少し詳しく言うと、「__クラス変数にもインスタンス変数にも一切アクセスしないメソッドを集めたクラス__」のことです。クラス変数にもインスタンス変数にも一切アクセスしないということは、データ構造を内部に持たないということです。\\ |
「クラスとはデータ構造」という原則に、これは明らかに反します。このようなユーティリティクラスを作ってしまうとデータ構造と処理が分離されてしまい、保守性が下がってしまいます。\\ |
\\ |
ユーティリティクラスの弊害については「[privateメソッド禁止]」の中で詳細に説明しているので参照して下さい。\\ |
関数を作ってはいけないのだから、ユーティリティクラスと世間で言われるクラスも当然作ってはいけません。ユーティリティクラスというのは関数やサブルーチンの単なる集まりであり、データ構造を持たないクラスだからです。\\ |
ユーティリティクラスと関数の弊害については「[privateメソッド禁止]」の中で詳細に説明しているので参照して下さい。\\ |
At line 8 changed 2 lines |
!!例外的にユーティリティクラスを許す場合 |
次の二つのケースではユーティリティクラスを例外的に許します。 |
!!例外的に関数を許す場合 |
次の二つのケースでは例外的に関数を許します。 |
At line 41 changed 3 lines |
の2つが分離されます。この__「相手側のシステムとの間で受け渡す処理」をユーティリティクラス(関数)として実装する__必要が出てきます。相手に渡せるのはデータのみであるため、そのデータをオブジェクトから受け取って渡す処理、つまり関数が別に必要だからです。\\ |
これをクラス図に描くと次のようになります。RDBユーティリティクラス%%sup ※/% が、受注伝票や発注伝票の属性値のみ(データ)をRDBMSとの間で受け渡しします。アプリケーションが稼働しているメモリ空間の外にRDBMSはあります。\\ |
※RDBユーティリティクラスは複数のクラスから出来ているため正確には__クラス群__です。\\ |
の2つが分離されます。この__「相手側のシステムとの間で受け渡す処理」を関数(関数)として実装する__必要が出てきます。相手に渡せるのはデータのみであるため、そのデータをオブジェクトから受け取って渡す処理、つまり関数が別に必要だからです。\\ |
これをクラス図に描くと次のようになります。RDB関数%%sup ※/% が、受注伝票や発注伝票の属性値のみ(データ)をRDBMSとの間で受け渡しします。アプリケーションが稼働しているメモリ空間の外にRDBMSはあります。\\ |
※RDB関数は複数のクラスから出来ているため正確には__クラス群__です。\\ |
At line 45 changed 2 lines |
Javaの場合、RDBユーティリティクラスの最下層には__「JDBCドライバ」(Java Database Connectivity Driver)__が配置されます。__O/Rマッパ(Object Relation Mapper)__がその上位に配置されることが多いのですが、受注伝票や発注伝票などの業務データと切り離されたこれらはすべてユーティリティクラス(関数)となります。\\ |
しかし、受注伝票や発注伝票の中に「RDBに書き込む」「RDBから読み込む」ようなメソッドを持ち、その中からRDBユーティリティクラス(群)を利用することによって、受注伝票や発注伝票を扱うアプリケーション側からはデータ構造と処理が一体化されている正しいクラスとして扱えます。次のような形です。\\ |
Javaの場合、RDB関数の最下層には__「JDBCドライバ」(Java Database Connectivity Driver)__が配置されます。__O/Rマッパ(Object Relation Mapper)__がその上位に配置されることが多いのですが、受注伝票や発注伝票などの業務データと切り離されたこれらはすべて関数(関数)となります。\\ |
しかし、受注伝票や発注伝票の中に「RDBに書き込む」「RDBから読み込む」ようなメソッドを持ち、その中からRDB関数(群)を利用することによって、受注伝票や発注伝票を扱うアプリケーション側からはデータ構造と処理が一体化されている正しいクラスとして扱えます。次のような形です。\\ |
At line 49 changed one line |
RDBユーティリティクラスとしてO/Rマッパをもし利用すると次のようになります。 |
RDB関数としてO/Rマッパをもし利用すると次のようになります。 |
At line 52 changed 2 lines |
!!「層」が増えるほどユーティリティクラスが必要となる |
前項で説明したように、外部のメモリ空間で稼働しているシステムとのやりとりが発生する境界ではデータ構造を持たないユーティリティクラス(関数)が必要になります。これは言い方を換えると、「RDB層」「アプリケーション層」などのような__層(Layer)があればその境界線でユーティリティクラスが必要になる__ということです。次の図を見て下さい。\\ |
!!「層」が増えるほど関数が必要となる |
前項で説明したように、外部のメモリ空間で稼働しているシステムとのやりとりが発生する境界ではデータ構造を持たない関数(関数)が必要になります。これは言い方を換えると、「RDB層」「アプリケーション層」などのような__層(Layer)があればその境界線で関数が必要になる__ということです。次の図を見て下さい。\\ |