実践的オブジェクト指向設計入門6
システムには、プロセッサ、テープドライブ、通信衛星などといった物理的な資源があります。また、ディスクスペース、ワークステーション画面やマウスボタンと言った空間(位置情報)、オブジェクトID、権限、などといった論理的な資源があります。これら多くの人から使用される資源の取り扱い方を慎重に考えなくてはなりません。
取り扱い方を考えないと、思わぬトラブルを生みます。オブジェクトIDの例について考えてみましょう。グローバルなオブジェクトIDは、一意でなければ大変な事になります。オブジェクトIDが利用者を表す場合、同じIDがあるという事は、なりすましが容易に可能となるシステムだという事です。他にも、オブジェクトがリソースであった場合、同じIDが存在してしまうと、リソースが判別できない事になり、予期せぬトラブルが発生してしまいます。IPアドレスが重複していればどうなるのかを考えると分かりやすいと思います。
大域資源は、割り当て方、意味と制御方法、回収もしくは破棄の三つの事柄を考えます。つまり、どの様にして大域資源を発行するのか、その大域資源は何を意味しどの様に制御するのか、用事がなくなったら回収もしくは廃棄をどの様にするのか・・・などを考える事になります。「など」と書いてあるのは、大域資源の性質により異なるからです。私の経験から言うと、大域資源を見つけ出し、その性質を考える事から始めるとよいと思います。
大域領域への同時アクセスは極力避けるとよいとされています。その理由は、資源のロックが難しいからです。トラブルを避けるために、あらかじめ大域領域へのアクセスを減らすシステムを設計しておけば、それだけトラブルの種が消えます。保守的すぎて使用し難いシステムになっては元もこうもありませんが、何でも大域資源として取り使いシステムを複雑化させるよりも、シンプルなシステムの構成を考え、大域領域の必要性を極力減らす様に設計するのが賢いやり方です。